2

我目前正在尝试使用 python、flask 和 sqlite 编写一个小的 web 应用程序,但我不确定如何处理数据库连接。

基本上我一直在关注“官方”教程(和http://flask.pocoo.org/docs/patterns/sqlite3/#sqlite3),在我的主要 Flask/App 模块中留下了这样的代码(大大缩短了) :

@vs_app.before_request
def before_request():
    g.db = sqlite3.connect("somedb.db")

def execute_db(command):
    return g.db.cursor().execute(command).fetchall()

@app.route("/givemeallusers")
def foo():
    return execute_db("SELECT * FROM users")

因此,这将为我的应用程序可以用来执行 sql 命令的每个请求创建一个 DB-Connection,并且它适用于较小的应用程序。
但是对于一个更大的项目,我想把我的数据库代码(带有一些实用方法)和应用程序代码放在不同的模块中,所以我可以(例如)写:

from my_database_module import user_auth #

@app.route("/login")
def foo():
    if user_auth(request.form["name"], request.form["pw"]):
        pass

但是为此,我需要从我的数据库类访问 g(或 g.db),而我可以让它工作的唯一方法是“手动”将 db-connection 移交给每个方法,给我留下类似的代码这个:

@app.route("/login")
def foo():
    if user_auth(g.db, request.form["name"], request.form["pw"]):
        pass

在我的数据库模块中

def user_auth(database, name, pw):
    pass

我认为这不是最好的方法,但我的其他想法(比如将 g 对象导入我的数据库类)不起作用。我也不知道我的方法对于并发数据库访问是否安全,因此我们将不胜感激。
tl; dr 如何以正确的方式拆分 Flask-App 和 Database/Database-Utility?

4

1 回答 1

0

以防有人偶然发现这个问题:
正确的答案是不要打扰问题中描述的方法,而是开始使用 Flask-SQLAlchemy。

于 2013-11-05T17:16:30.373 回答