Flask:连接到 sqlite

Flask: Connect to sqlite

所以我是 Python 的新手,目前正在试用 Flask。我已经阅读了大量关于如何使用 flask 配置与简单数据库的连接但没有成功的文档和博客。你们能帮帮我吗?

我现在不想要任何花哨的东西,只是为了建立连接。下面是我想要开始工作的带有简单测试查询的代码。

结果是一个普通的 500 内部服务器错误。

app = Flask(__name__)

from flask import Flask
import sqlite3
from flask import g

@app.before_request
def before_request():
    g.db = sqlite3.connect("database.db")


@app.teardown_request
def teardown_request(exception):
    if hasattr(g, 'db'):
        g.db.close()


@app.route('/')
def hello_world():
    g.db.execute("INSERT INTO test VALUES 'TestValue'")
    g.db.commit()


if __name__ == '__main__':
    app.run()

有几件事可能会导致这里出现问题:

首先,您的应用程序需要先导入 Flask class,然后才能构建应用程序。所以:

app = Flask(__name__):

应该遵循导入语句。

我假设您收到 500 服务器错误,这不是导致问题的原因。

其次,您的插入有一个小的语法错误。它应该是:

g.db.execute("INSERT INTO test VALUES ('TestValue')")

请阅读SQLite documentation on the correct syntax for using insertions. Or see this tutorial(其实比较有启发性)

最后,我怀疑您还没有设置数据库,这就是插入错误的原因。例如,如果数据库不存在,Flask 如何将数据插入 table?

您应该认识到 Flask 足够智能来创建一个 SQLite 数据库,您将在名为 database.db 的工作目录中找到它,这正是您在这里所做的:

g.db = sqlite3.connect("database.db")

但这不会用正确的模式填充该数据库以允许您通过 Flask 应用程序实际插入数据。您需要的是通过将模式写入数据库来初始化数据库。例如,创建架构:

CREATE TABLE test (
    field1 STRING
);

然后,在命令提示符下发出:

sqlite3 database.db < schema.sql

这将创建一个数据库,其中包含一个名为 test 的 table,它接受一个字符串类型的字段。现在数据库已经初始化,您可以通过 Flask 应用程序写入它。较大的项目通常会有一个数据库初始化脚本。