如何在较大的Python / Flask应用程序中组织数据库连接?

时间:2013-11-04 15:00:40

标签: python sqlite flask

我目前正在尝试使用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-commands的每个请求创建一个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?

1 个答案:

答案 0 :(得分:1)

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