Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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 服务器无法恢复事务。描述:980000002。(3971)(SQLEndTran)“)_Python_Sql Server_Pandas_Transactions - Fatal编程技术网

Python 服务器无法恢复事务。描述:980000002。(3971)(SQLEndTran)“)

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

我试图做的是使用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, 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)