8

SQLAlchemy (および Elixir) と SQLite をデータベース バックエンドとして使用して、Python でアプリケーションを作成しています。コードを使用して新しいトランザクションを開始しますsession.begin_transaction()が、呼び出すsession.rollback()と次のエラーが発生します。

sqlalchemy.exceptions.OperationalError: (OperationalError) no such savepoint: sa_savepoint_1 u'ROLLBACK TO SAVEPOINT sa_savepoint_1' []

を呼び出しても同様のエラーが発生しますsession.commit()。私が知る限り、sqlite は SAVEPOINTS ( http://www.sqlite.org/lang_savepoint.html ) をサポートしています。

ネストされたトランザクションを機能させるにはどうすればよいですか?

4

3 に答える 3

3

sqlite は SAVEPOINT を介してネストされたトランザクションをサポートしているように見えますが、2009 年 1 月 12 日にリリースされたバージョン 3.6.8のみです。少なくとも v2.6 までの Python は、以前のバージョンを使用します。

c:\svn\core\apps\general>python
Python 2.6.2 (r262:71605, Apr 14 2009, 22:40:02) [MSC v.1500 32 bit (Intel)] on win32
>>> import sqlite3 as s
>>> s.sqlite_version
'3.5.9'

PySqliteを自分でインストールできると思いますが、最新のものは v3.6.12 をサポートしているようです。これで問題が解決するとは断言できませんが、その答えが、現在問題が解決していない理由を説明していると思います。

于 2009-12-08T14:17:27.670 に答える
0

SQLAlchemy は pysqlite を使用して SQLite データベースと対話します。間違っていなければ、pysqlite はデフォルトで送信したクエリをトランザクションでラップします。

答えは、接続時に分離レベルを正しく設定することにあるかもしれません。

ここでそれについてのいくつかの議論

于 2009-10-31T17:01:33.090 に答える