【问题标题】:Autocommit is causing pandas to_sql to fail自动提交导致熊猫 to_sql 失败
【发布时间】:2019-10-31 00:38:47
【问题描述】:

我的引擎参数有问题:

    import pyodbc
    import pandas as pd
    from sqlalchemy import create_engine
    import urllib


    conn_str = (
        r'Driver=ODBC Driver 11 for SQL Server;'
        r'Server=Saturn;'
        r'Database=ExperienceRating2019;'
        r'Trusted_Connection=yes;'
    )
    quoted_conn_str = urllib.parse.quote_plus(conn_str)
    engine = create_engine('mssql+pyodbc:///?odbc_connect={}'.format(quoted_conn_str)).execution_options(autocommit=True)
    cnxn = engine.connect()

    splitpoint = 17000
    excel_file = "#2 DRATIO RUN.xlsx"
    d_ratio_sheet = "D RATIO & ELR"

    d_ratio = pd.read_excel(open(excel_file,'rb'),sheet_name = d_ratio_sheet)
    d_ratio.to_sql("d_ratio", cnxn, if_exists = 'replace')

我会得到以下错误:

DBAPIError: (pyodbc.Error) ('HY010', '[HY010] [Microsoft][ODBC Driver 11 for SQL Server]函数序列错误 (0) (SQLFetch)') (此错误的背景位于:@987654321 @)

如果我更改引擎以丢失自动提交

    engine = create_engine('mssql+pyodbc:///?odbc_connect={}'.format(quoted_conn_str))

错误消失了(耶!)但后来在我执行 SP 的代码中,它将不再提交:

    engine.execute("sp_refresh_inputs")

**问题:**如何更改我的连接,以便 pandas 和 sqlalchemy 都可以工作?

【问题讨论】:

    标签: python-3.x pandas sqlalchemy


    【解决方案1】:

    我最终使用了两个引擎,一个用于 pandas,一个用于 sqlalchemy:

    cnxn = create_engine('mssql+pyodbc:///?odbc_connect={}'.format(quoted_conn_str))
    engine = create_engine('mssql+pyodbc:///?odbc_connect={}'.format(quoted_conn_str)).execution_options(autocommit=True)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-09
      • 2015-01-02
      • 2016-03-17
      • 2017-10-12
      • 1970-01-01
      • 1970-01-01
      • 2021-01-16
      • 2016-05-10
      相关资源
      最近更新 更多