【问题标题】:Flask: Connect to sqlite烧瓶:连接到 sqlite
【发布时间】:2015-04-09 02:12:40
【问题描述】:

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

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

这样的结果是一个普通的 500 Internal Server Error。

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()

【问题讨论】:

  • 500 错误会导致控制台回溯,你能分享一下吗?您的database.db 数据库实际上 一个test 表吗?您还使用了相对路径,因此database.db 将在当前工作目录中打开。这可能不是您所期望的。
  • 您实际上并没有从您的视图函数返回任何数据 - 如果您 - 1. 在您的 g.db.commit() 和 2. 将 app.run() 更改为 app.run(debug=True) 之后添加 return 'Hello World' 会发生什么?跨度>

标签: python database sqlite flask


【解决方案1】:

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

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

app = Flask(__name__):

应该遵循导入语句。

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

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

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

请阅读SQLite documentation,了解使用插入的正确语法。或查看this tutorial(实际上更有趣)。

最后,我怀疑您尚未设置数据库,这就是插入错误的原因。例如,如果数据库不存在,Flask 怎么往表中插入数据?

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

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

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

CREATE TABLE test (
    field1 STRING
);

然后,在命令提示符下:

sqlite3 database.db < schema.sql

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-10
    • 2013-03-18
    • 2014-02-27
    • 1970-01-01
    • 2021-07-30
    相关资源
    最近更新 更多