【问题标题】:SQLite insert statement failing silently using FlaskSQLite 插入语句使用 Flask 静默失败
【发布时间】:2013-06-17 10:21:08
【问题描述】:

我正在关注 Flask 网站上的 Flask/SQLite 教程: http://flask.pocoo.org/docs/patterns/sqlite3/

我所有的选择查询都工作正常,但是当我尝试插入语句时没有任何反应。我没有收到错误,但我的数据库中也没有插入行。当没有错误发生时,我不确定如何调试它。有人有想法吗?

这是我的设置代码:

def connect_db():
    return sqlite3.connect(DATABASE)

@application.before_request
def before_request():
    g.db = connect_db()

@application.teardown_request
def teardown_request(exception):
    if hasattr(g, 'db'):
        g.db.close()

def query_db(query, args=(), one=False):
    cur = g.db.execute(query, args)
    rv = [dict((cur.description[idx][0], value)
               for idx, value in enumerate(row)) for row in cur.fetchall()]
    return (rv[0] if rv else None) if one else rv

这是一个有效的查询示例:

@application.route('/api/galleries')
def get_galleries():
    query = query_db('select id, title, thumbnail from galleries')
    return json.dumps(query)

这是我的插入语句。这个什么都不做,没有错误:

g.db.execute('insert into photos (is_favorite, galleries_id, filename) values (?, ?, ?)', [is_favorite, galleries_id, filename])

【问题讨论】:

  • 你能发布你的架构和试图插入行的视图函数的整个代码吗?

标签: python sqlite flask


【解决方案1】:

你是在 INSERT 之后提交吗?

g.db.execute('insert into photos (is_favorite, galleries_id, filename) values (?, ?, ?)', [is_favorite, galleries_id, filename])
g.db.commit()

【讨论】:

  • 我怀疑可能是这种情况,但我找不到它的文档。我会试试看的。
  • 就是这样。插入语句显然必须在成功之前显式提交。谢谢保罗。
  • 这也让我感到难过。问题是,sqlite3 execute() 语句的 python 文档页面上的示例在插入后也没有提到提交(docs.python.org/2/library/sqlite3.html#sqlite3.Cursor.execute)。我认为这也是一个有用的习惯用法,因为上下文管理器将在退出时提交:docs.python.org/2/library/…
【解决方案2】:

@paul 添加到答案...

从这里:https://docs.python.org/2/library/sqlite3.html#using-the-connection-as-a-context-manager

您可以使用上下文管理器 (with),它会在退出上下文时提交:

with g.db:
    g.db.execute('insert into photos (is_favorite, galleries_id, filename) values (?, ?, ?)', [is_favorite, galleries_id, filename])

此外,在该链接中,您可以了解如何将其与 try/catch 结合使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多