Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用PyODBC和SQL Alchemy同步数据更新_Python_Database_Parallel Processing_Sqlalchemy_Pyodbc - Fatal编程技术网

Python 使用PyODBC和SQL Alchemy同步数据更新

Python 使用PyODBC和SQL Alchemy同步数据更新,python,database,parallel-processing,sqlalchemy,pyodbc,Python,Database,Parallel Processing,Sqlalchemy,Pyodbc,我有一个脚本,由几个用户使用。在此脚本中,首先删除数据库表,然后上载数据库表 import pyodbc import sqlalchemy engine = sqlalchemy.create_engine('credtials', echo=False) cnxn = pyodbc.connect('credentials') with pyodbc.connect('...') as cnxn: mycursor = cnxn.cursor() mycursor.exe

我有一个脚本,由几个用户使用。在此脚本中,首先删除数据库表,然后上载数据库表

import pyodbc
import sqlalchemy

engine = sqlalchemy.create_engine('credtials', echo=False)
cnxn = pyodbc.connect('credentials')

with pyodbc.connect('...') as cnxn:
    mycursor = cnxn.cursor()
    mycursor.execute('query_delete')
    mycursor.commit()
    mycursor.close()

# Precaluclated dataframe that contains the data (calculation not shown)
df.to_sql(name='db_table', con=engine, index=False, if_exists='append')

问题是,有时两个进程的时间安排不当。在这种情况下,过程的顺序是

删除(流程1) 删除(流程2) 上传(流程1) 上传(流程2)


如果发生这种情况,数据将被复制。是否有解决方案来防止此问题?

您可能需要使用类似以下代码(未测试)来加强事务隔离:

engine=sqlalchemy.create_引擎(连接\u uri,隔离\u level='SERIALIZABLE')
使用engine.begin()作为conn:
conn.execute(sqlalchemy.text('DELETE FROM db_table WHERE…'))
to_sql(name='db_table',con=conn,index=False,如果_存在='append')
打印('更新完成')