(MariaDBの上で実行されている)私のSQLAlchemyのアプリケーションは、後者が前者の子レコードである二つのモデルMyModelA
とMyModelB
含まれていますDB例外後のSQLAlchemyロールバックの不具合?
class MyModelA(db.Model):
a_id = db.Column(db.Integer, nullable=False, primary_key=True)
my_field1 = db.Column(db.String(1024), nullable=True)
class MyModelB(db.Model):
b_id = db.Column(db.Integer, nullable=False, primary_key=True)
a_id = db.Column(db.Integer, db.ForeignKey(MyModelA.a_id), nullable=False)
my_field2 = db.Column(db.String(1024), nullable=True)
をこれらは私が作成MyModelA
とMyModelB
のインスタンスである:
>>> my_a = MyModelA(my_field1="A1")
>>> my_a.aid
1
>>> MyModelB(a_id=my_a.aid, my_field2="B1")
I有しMyModelA
のインスタンスa_id==1
削除以下のコード:
私は私が手に予期しない結果で、このコードを見て実行します。
#1) Number of MyModelAs: 1
#2) Cannot delete instance of MyModelA because it has child record(s)!
#3) Number of MyModelAs: 0
は、削除はおそらく失敗し、DBは、ロールバックが発生する例外をスローします。しかし、ロールバックした後でさえ、テーブルの行数は、削除されていない行が実際には消えていることを示しています。
どうしてですか?これをどうすれば解決できますか? SQLAlchemyのバグのようです。
自動コミットが無効になっているかどうかを確認しましたか? –
同じ考え:あなたはMariaDBを使っていると言います。 MariaDBのエンジンは? MyISAMはトランザクションをサポートしないので、常に「自動コミット」モードになります –
sqlalchemyによって生成されるクエリは何ですか? 'SELECTs'は' FOR UPDATE'を持っていますか? –