add run_nofk to AIOSQLite to run without foreign keys
This commit is contained in:
parent
57eb56b92d
commit
f134bc264b
1 changed files with 19 additions and 0 deletions
|
@ -67,6 +67,25 @@ class AIOSQLite:
|
||||||
self.connection.rollback()
|
self.connection.rollback()
|
||||||
raise
|
raise
|
||||||
|
|
||||||
|
def run_nofk(self, fun, *args, **kwargs) -> Awaitable:
|
||||||
|
return wrap_future(self.executor.submit(self.__run_transaction_no_fk, fun, *args, **kwargs))
|
||||||
|
|
||||||
|
def __run_transaction_no_fk(self, fun: Callable[[sqlite3.Connection, Any, Any], Any], *args, **kwargs):
|
||||||
|
try:
|
||||||
|
self.connection.execute('pragma foreign_keys=off')
|
||||||
|
self.connection.commit()
|
||||||
|
try:
|
||||||
|
self.connection.execute('begin')
|
||||||
|
result = fun(self.connection, *args, **kwargs) # type: ignore
|
||||||
|
self.connection.commit()
|
||||||
|
return result
|
||||||
|
except (Exception, OSError): # as e:
|
||||||
|
self.connection.rollback()
|
||||||
|
raise
|
||||||
|
finally:
|
||||||
|
self.connection.execute('pragma foreign_keys=on')
|
||||||
|
self.connection.commit()
|
||||||
|
|
||||||
|
|
||||||
def constraints_to_sql(constraints, joiner=' AND ', prepend_key=''):
|
def constraints_to_sql(constraints, joiner=' AND ', prepend_key=''):
|
||||||
sql, values = [], {}
|
sql, values = [], {}
|
||||||
|
|
Loading…
Reference in a new issue