Python 服务器无法恢复事务。描述:980000002。(3971)(SQLEndTran)“)
我试图做的是使用pd.to_SQL方法在SQL server中推送数据帧。 langyuage-python 3.6,pandas版本0.25.1 发动机变量 engine=create\U enginemssql+pyodbc://?odbc\U connect=%s%PARAM,池大小=20,最大溢出=10,池回收=60,池超时=30 这是调用staging_标准化方法的主脚本 标准化方法Python 服务器无法恢复事务。描述:980000002。(3971)(SQLEndTran)“),python,sql-server,pandas,transactions,Python,Sql Server,Pandas,Transactions,我试图做的是使用pd.to_SQL方法在SQL server中推送数据帧。 langyuage-python 3.6,pandas版本0.25.1 发动机变量 engine=create\U enginemssql+pyodbc://?odbc\U connect=%s%PARAM,池大小=20,最大溢出=10,池回收=60,池超时=30 这是调用staging_标准化方法的主脚本 标准化方法 def staging_standardisation(engine, table_name, col
def staging_standardisation(engine, table_name, column_names, column_obj, **kwargs):
try:
query = "SELECT * FROM dbo.License_Search"
sql_df = pd.read_sql(query, engine)
df = sql_df[column_names]
df = df.rename(index=str, columns=column_obj)
try:
if 'authority_id' in column_obj.values():
pass
else:
df['authority_id'] =53
except KeyError:
df['authority_id'] = None
try:
df.to_sql(name=staging_table, con=engine, index=False, if_exists='append') # this line causing error.
except Exception as exe:
print(table_name, exe)
投掷误差
(pyodbc.ProgrammingError) ('42000', '[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]
The server failed to resume the transaction. Desc:8c00000007.
(3971) (SQLEndTran); [42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]The
transaction active in this session has been committed or aborted by another session. (3926)')
(Background on this error at: http://sqlalche.me/e/f405)
问题在于铸造。在dataframe中,datecolumn类型是字符串。然后我将列类型转换为DateTime 仅供参考:vs代码显示的错误有限。我们在jupyter笔记本中运行了一个单独的测试,其中出现了全部错误,并发现是日期列
def staging_standardisation(engine, table_name, column_names, column_obj, **kwargs):
try:
query = "SELECT * FROM dbo.License_Search"
sql_df = pd.read_sql(query, engine)
df = sql_df[column_names]
df = df.rename(index=str, columns=column_obj)
df['Date'] = pd.to_datetime(df['Date'])
try:
if 'authority_id' in column_obj.values():
pass
else:
df['authority_id'] =53
except KeyError:
df['authority_id'] = None
try:
df.to_sql(name=staging_table, con=engine, index=False, if_exists='append') # this line causing error.
except Exception as exe:
print(table_name, exe)
query=从表_name+中选择id+,其中name=+'+{0};真是一团糟。它还暴露于SQL注入。但是从表_name中选择id+让我感到困惑;为什么你要把这些字符串合并成一个字符串呢?query=SELECT id FROM table\u name,其中name=%s,authority\u id。但是我完全不能理解它。@roganjosh我修改了set df['authority\u id']=53,query=SELECT*FROM dbo.License\u搜索代码,然后面对同样的错误再次运行它
def staging_standardisation(engine, table_name, column_names, column_obj, **kwargs):
try:
query = "SELECT * FROM dbo.License_Search"
sql_df = pd.read_sql(query, engine)
df = sql_df[column_names]
df = df.rename(index=str, columns=column_obj)
df['Date'] = pd.to_datetime(df['Date'])
try:
if 'authority_id' in column_obj.values():
pass
else:
df['authority_id'] =53
except KeyError:
df['authority_id'] = None
try:
df.to_sql(name=staging_table, con=engine, index=False, if_exists='append') # this line causing error.
except Exception as exe:
print(table_name, exe)