2015-02-09 159 views
1

所以我是新来的Python,我目前正在试验烧瓶。我已经阅读了大量的文档和博客,了解如何使用烧瓶配置连接到简单的数据库,但没有任何成功。你们能帮我吗?烧瓶:连接到sqlite

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

这是一个普通的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() 
+2

500错误会导致在控制台上回溯,你能分享吗?你的'数据库。db'数据库实际上*有* test表吗?您也正在使用相对路径,因此'database.db'将在当前工作目录中打开。这可能不是你所期望的。 – 2015-02-09 11:26:29

+1

你实际上并没有从你的视图函数返回任何数据 - 如果你发生什么情况 - 1.在'g.db.commit()'后添加'return'Hello World''并且2.改变'app.run()'到'app.run(debug = True)'? – 2015-02-09 18:32:52

回答

3

有可能导致此问题的几件事情:

首先,你的应用需要导入瓶类,才可以构建应用程序。所以:

app = Flask(__name__):

应该遵循 import语句。

我假设,因为你有500服务器错误,这不会导致问题。

其次,插入时出现小的语法错误。它应该阅读:

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

请阅读正确的语法SQLite documentation使用插入。或者参见this tutorial(这实际上更有启发性)。

最后,我嫌疑人你没有数据库设置,这就是为什么有插入错误。例如,如果数据库不存在,Flask如何将数据插入表中?

你应该认识到,瓶足够聪明来创建一个SQLite数据库,您将在名为database.db工作目录找到哪个是你所做的事在这里:

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

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

CREATE TABLE test (
    field1 STRING 
); 

然后,在命令提示问题:

sqlite3 database.db < schema.sql

这将创建一个数据库称为测试的单个表,它接受类型的单个场串。现在数据库已初始化,您可以通过Flask应用程序写入数据库。较大的项目通常会有一个数据库初始化脚本。