wil*_*son 4 python database sqlite flask
所以我是 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()
Run Code Online (Sandbox Code Playgroud)
有一些事情可能会导致这里出现问题:
首先,您的应用程序需要先导入 Flask 类,然后才能构建应用程序。所以:
app = Flask(__name__):
应遵循导入语句。
我假设由于您收到 500 服务器错误,因此这不会导致问题。
其次,您的插入有一个小的语法错误。它应该是:
g.db.execute("INSERT INTO test VALUES ('TestValue')")
请阅读有关使用插入的正确语法的SQLite 文档。或查看本教程(实际上更具有启发性)。
最后,我怀疑您还没有设置数据库,这就是出现插入错误的原因。例如,如果数据库不存在,Flask 如何向表中插入数据?
你应该认识到,瓶是足够聪明,创建一个SQLite数据库,您将在指定的工作目录中发现database.db这是你在这里做什么:
g.db = sqlite3.connect("database.db")
但这不会用正确的模式填充该数据库,以允许您通过 Flask 应用程序实际插入数据。您需要的是通过将模式写入数据库来初始化数据库。例如,创建架构:
CREATE TABLE test (
field1 STRING
);
Run Code Online (Sandbox Code Playgroud)
然后,在命令提示符问题:
sqlite3 database.db < schema.sql
这将创建一个包含一个名为 test 的表的数据库,该表接受一个字符串类型的字段。现在数据库已初始化,您可以通过 Flask 应用程序写入它。较大的项目通常会有一个数据库初始化脚本。