2013-11-25 40 views
0

我現在正在使用Flask和SQLite3的CRUD項目。這裏是我的代碼Sqlite3與燒瓶用不同的方式?

def connect_db(): 
    return sqlite3.connect(app.config['DATABASE']) 

@app.route('/hello') 
def hello(): 
    g.db = connect_db() 
    cur = g.db.execute('SELECT name, lastname FROM customer') 
    x = [dict(name=row[0], lastname=row[1]) for row in cur.fetchall()] 
    g.db.close() 
    return render_template('hello.html', customer=x) 

我是一個非常新的編程和數據庫也很新。我已閱讀Flask文檔,這是:http://flask.pocoo.org/docs/patterns/sqlite3/,並發現它很混亂。在燒瓶文檔中提供的步驟有什麼好處?背後有什麼概念?我真的失去了他們正在做的事情。我仍然可以像上面的代碼一樣執行此操作嗎?或者我應該改變我的自我使用燒瓶文檔樣式?我現在正在爲餐館庫存做一個基本的CRUD應用程序。

回答

0

基本上你想要做的是在應用程序上下文中創建一個數據庫,這就是爲什麼你使用flask.g,然後在不再需要時關閉它(即當請求關閉時)。

這和你的代碼基本相同,但是由於你不必手動關閉每個請求的連接並且只有在必要時纔會打開,所以flask doc的工作效率會更好。

+1

如果我使用這組代碼: DEF get_db(): 分貝= GETATTR(克, '_database',無) 如果db是無: 分貝= g._database = connect_to_database() 返回分貝 @ app.teardown_appcontext 高清close_connection(例外): DB = GETATTR(G, '_database',無) 如果db是不無: db.close() 我沒有寫G功能.db = connect_db()和這個g.db.close()在我的def hello()中:對嗎?我只寫cur = get_db()。cursor(),所以對我來說會少一些工作?因爲這些都包括在內? – Team

+0

你的意思是應用程序上下文中的數據庫是什麼?你的意思是用於測試目的嗎?如果我製作真正的應用程序,這個代碼是否適合我的項目? – Team

+0

這意味着數據庫不會存儲在請求中,而是存儲在所有應用程序中。至於第一個問題,是的。 – n1xx1