SQLServer的SQLAlchemy / pandas to_sql - 主数据库中的CREATE TABLE

时间:2015-07-28 04:24:13

标签: python sql-server pandas sqlalchemy

使用MSSQL(2012版),我使用SQLAlchemy和pandas(在Python 2.7上)将行插入SQL Server表。

在尝试使用特定服务器字符串的pymssql和pyodbc之后,我正在尝试使用odbc名称:

import sqlalchemy, pyodbc, pandas as pd

engine = sqlalchemy.create_engine("mssql+pyodbc://mssqlodbc")
sqlstring = "EXEC getfoo"
dbdataframe = pd.read_sql(sqlstring, engine)

这部分工作得很好,并与其他方法(pymssql等)一起使用。但是,pandas to_sql方法不起作用。

finaloutput.to_sql("MyDB.dbo.Loader_foo",engine,if_exists="append",chunksize="10000")

使用此语句,我得到一个一致的错误,即pandas正在尝试在sql server主数据库中执行CREATE TABLE,它不会被禁止使用。

如何让pandas / SQLAlchemy / pyodbc指向正确的mssql数据库? to_sql方法似乎忽略了我在引擎连接字符串中放置的内容(虽然read_sql方法似乎很好地接受它。

1 个答案:

答案 0 :(得分:3)

要回答这个问题:问题是您在表名本身中指定了架构。如果您提供"MyDB.dbo.Loader_foo"作为表名,pandas会将此完整字符串解释为表名,而不仅仅是"Loader_foo"

解决方案是仅提供"Loader_foo"作为表名。如果您需要指定要将此表写入的特定架构,可以使用schema kwarg(请参阅docs):

finaloutput.to_sql("Loader_foo", engine, if_exists="append")
finaloutput.to_sql("Loader_foo", engine, if_exists="append", schema="something_else_as_dbo")