2016-06-15 9 views
0

Ich versuche, mehrere Einsätze in eine MSSQL-Datenbank zu tun, indem Sie direkt die SqlAlchemy-Engine verwenden.SQLAlchemy Rollback in MSSQL auf Inserts

table = metadata.tables['TestTable'] 
ins = table.insert() 
with engine.begin() as conn: 
    conn.execute(ins, data) 

Die erste Einfügung funktioniert kein Problem. Der zweite Einsatz wird versuchen, läuft dann einen Rollback ausführen, die dann mit dem folgenden Fehler fehl:

sqlalchemy.exc.ProgrammingError: (pyodbc.ProgrammingError) ('25000', '[25000' [FreeTDS][SQL Server]The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION. (3903)(SQLEndTran)') 

ich bereits das Verhalten der Warteschlange Pool verändert hat zu verwenden reset_on_return = „begehen“, so ich ein bin Verlust dafür, warum dies geschieht. Irgendwelche Ideen, wie man mehrere Einsätze erlaubt?

+0

In Ihrem Beispiel wird nur ein Satz eingefügt. Willst du sagen, dass das Ausführen dieses Codes mehrere Male nicht funktioniert? – univerio

+0

Korrekt. Jetzt ist die Datenvariable eine Liste, die viele Datensätze enthält, aber das nächste Mal, wenn ich versuche, dies auszuführen, schlägt es fehl. – grromrell

Antwort

0

Es stellt sich heraus, dass bei einem Fehler in der Transaktion SQLAlchemy Rollback immer noch, ob Sie reset_on_return auf "commit" setzen oder nicht. Ich habe versucht, np.nan Werte von einem Pandas Dataframe einzufügen, was den Fehler verursacht.