我使用以下代码将 DataFrame 插入 MS SQL Server 数据库。
data
是一个 pd.DataFrame,与数据库具有相同的列。
from sqlalchemy import create_engine
engine = create_engine(f'mssql+pyodbc:///?odbc_connect={connection_string}', fast_executemany=True)
with engine.connect() as connection:
data.to_sql(
'dbo.tablename',
connection,
if_exists='append',
index=False,
dtype={...} # Correct mapping of columns in data to SQL data types.
)
代码通过,我没有收到任何错误。然而,即使数据库应该改变,它也不会改变。
如何调试这段代码?
我终于找到了问题所在。这部分代码似乎发生了一些奇怪的行为:
data.to_sql('dbo.tablename', ...)
使用前缀
dbo.
在SSMS中很常见,但sqlalchemy似乎没有正确支持它。删除dbo.
后,数据写入数据库。