2016-10-22 44 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

你太棒了!最后一个问题,这些有什么好的资源?书籍,教程或例子? –