pandas.to_sql 函数没有按预期转换 dtype

pandas.to_sql function does not convert dtype as expected

我正在尝试使用以下代码将 pandas df 导出到 SQL 服务器:

dtypedict={"column1": sqlalchemy.types.VARCHAR(length=50), 
                   "column2": sqlalchemy.types.VARCHAR(length=50),
                   'column3': sqlalchemy.types.VARCHAR(length=50),
                   'column4': sqlalchemy.types.INTEGER(),
                   'column5': sqlalchemy.types.Date(),
                   'column6': sqlalchemy.types.VARCHAR(length=50),
                   'column7': sqlalchemy.types.VARCHAR(length=50),
                   'column8': sqlalchemy.types.VARCHAR(length=50), 
                   'column9': sqlalchemy.types.VARCHAR(length=50)}

staging.columns = staging.columns.str.replace(' ','_')
staging.fillna('', inplace=True)

server = 'SV' 
database = 'DB' 
username = 'U' 
password = 'PW'  
cnxn = 'DRIVER={SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password

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

staging.to_sql('Staging_table', schema='dbo', con=engine, chunksize=50, index=False, if_exists='replace', dtype=dtypedict, method='multi')

出于某种原因,我不断收到以下错误:

('22018', "[22018] [Microsoft][ODBC SQL Server Driver][SQL Server]Conversion failed when converting the nvarchar value 'No EQ' to data type int. (245) (SQLExecDirectW)")

此 'No EQ' 值出现在第 2 列中。我不明白为什么函数会尝试将 nvarchar 转换为 int,因为指定的 dtype 是 varchar。检查 Azure Data Studio 中的列类型,varchar 也被正确解析为 column2 的 sql 类型。 df 数据类型是对象。

不幸的是,我必须使用旧的 SQL 服务器驱动程序,并且由于权限限制无法下载最新的 ODBC。

有人对如何解决这个问题有建议吗?

我仔细检查了 dict 中的列名是否正确命名,它们是因为一切都解析为 true:

col_list = staging.columns.to_list()

for col in col_list:
    for key in dtypedict.items():
        if col in key:
            print('True for ' + col)

看起来 df 或 to_sql 过程中的对象数据类型对于看似包含整数值和字符串值并被误解为 int 列的列不起作用,即使数据类型是用字典.

我使用 .astype(str) 函数转换了所有组合的 dtype 列,现在 to_sql 适用于所有列!