2015-02-09 136 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應用程序寫入數據庫。較大的項目通常會有一個數據庫初始化腳本。