ちょっとした質問があります。データの長い配列を DB に挿入していますが、新しい行の一部が IntegrityError 例外をスローすることがあります。それは問題ありません。私はそれらを簡単に認識できます。問題は、この「偽の」挿入を元に戻すためにロールバックすると、以前の行もすべて削除されることです。
次にやりたいことは、直前の状態にロールバックして、次の挿入を続行することです。
import sqlalchemy as alc
def insert(self, specs):
#do stuff to transfor specs in data_db
entry = Check_Point(data_db)
session.add(entry)
try:
session.flush()
except alc.exc.IntegrityError:
print 'int Error'
session.rollback()
ということで、ちょっと調べてみるとこんなのがありました。
http://docs.sqlalchemy.org/en/rel_0_7/orm/session.html#using-savepoint
for record in records:
try:
with session.begin_nested():
session.merge(record)
except:
print "Skipped record %s" % record
session.commit()
しかし、「レコード」が挿入されるオブジェクトの配列である場合 (私の場合は Check_Point のインスタンス)、実際には機能しません。次のエラーが表示されます。
このセッションのトランザクションは、ネストされた rollback() 呼び出しによってロールバックされました。新しいトランザクションを開始するには、最初に Session.rollback() を発行します
問題の解決に近づいていますが、助けが必要です。
前もって感謝します!