使用SQLite3和Python / Flask插入值

时间:2016-10-22 18:24:03

标签: python flask sqlite

我在一个小型网站工作,我想在这里展示,插入,编辑和删除数据库中的元素

我完成了用这条路线显示数据:

@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'))

我搜索到处都是,但事实是,有很多不同的方法可以做到这一点,我不能让它工作。我跟着这个例子; http://opentechschool.github.io/python-flask/extras/databases.html

1 个答案:

答案 0 :(得分:2)

每个请求都需要添加g.db连接。您只能在objects中创建它,因此insert_value不存在。 g是在每个请求的上下文中创建的对象。

如示例代码所示,您应该在每个请求之前创建连接并将其添加到g

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

请务必在@app.teardown_request中关闭它。