3

Flask Web サイトの Flask/SQLite チュートリアルに従っています: http://flask.pocoo.org/docs/patterns/sqlite3/

すべての選択クエリは正常に機能していますが、insert ステートメントを試しても何も起こりません。エラーは発生しませんが、データベースに行が挿入されません。エラーが発生していないときにこれをデバッグする方法がわかりません。考えている人はいますか?

これが私のセットアップコードです:

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])
4

2 に答える 2

12

INSERT の後にコミットしていますか?

g.db.execute('insert into photos (is_favorite, galleries_id, filename) values (?, ?, ?)', [is_favorite, galleries_id, filename])
g.db.commit()
于 2013-06-20T14:46:16.660 に答える
0

@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 と組み合わせて使用​​する方法を確認できます。

于 2016-03-05T21:54:48.620 に答える