2016-10-22 45 views
0

我在一個小網站,我想表明,插入,修改,然後從數據庫中刪除元素插入用的SQLite3和Python /瓶

我實現顯示與該路由的數據工作的值:

@app.route('/objects') 
def objects(): 
    g.db = sqlite3.connect(db_location) 
    cur = g.db.execute('SELECT * FROM milkyway ORDER BY type') 
    objects = [dict(id=row[0], type=row[1], name=row[2], description=row[3], size=row[4], mass=row[5],distance=row[6], discoverer=row[7], image_url=row[8]) for row in cur.fetchall()] 
    g.db.close() 
    return render_template("objects.html",objects=objects) 

,現在我想插入的元素,但我收到一個錯誤「AttributeError的:‘_AppCtxGlobals’對象有沒有屬性‘DB’」

@app.route('/insert_value',methods = ['POST', 'GET']) 
def insert_value(): 
    atype = request.form['type'] 
    name = request.form['name'] 
    description = request.form['description'] 
    size = request.form['size'] 
    mass = request.form['mass'] 
    distance = request.form['distance'] 
    discoverer = request.form['discoverer'] 
    image_url = request.form['image_url'] 

    g.db.execute('INSERT INTO milkyway (type,name,description,size,mass,distance,discoverer,image_ur) VALUES (?,?,?,?,?,?,?,?)', [atype], [name], [description], [size], [mass], [distance], [discoverer], [image_url]) 

    g.db.commit() 
    return redirect(url_for('objects')) 

我搜索無處不在b但事情是,有這麼多不同的方式來做到這一點,我不能讓它工作。我舉例說明了這個例子; http://opentechschool.github.io/python-flask/extras/databases.html

回答

1

連接g.db需要與每個請求一起添加。您只能在objects中創建它,因此它不存在insert_valueg是在每個請求的上下文中創建的對象。

如示例代碼所示,您應該在每個請求前創建連接並將其添加到g

@app.before_request 
def before_request(): 
    g.db = sqlite3.connect(db_location) 

同時務必關閉它在@app.teardown_request

+0

我有另一個錯誤,TypeError:函數至多需要2個參數(給定9)。我認爲它是因爲我沒有添加第一個ID。 id是autoincrement,如何將它留空以便自動執行? –

+0

在'g.db.execute'中,'[atype,name,description,...]'不是'[atype],[name] ...'。傳入語句參數列表,而不是每個參數作爲自己列表中的參數。 – xli

+0

你太棒了!最後一個問題,這些有什麼好的資源?書籍,教程或例子? –