【发布时间】:2015-10-18 11:30:32
【问题描述】:
使用 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 Master db 中执行 CREATE TABLE,这是不允许的。
如何让 pandas/SQLAlchemy/pyodbc 指向正确的 mssql 数据库? to_sql 方法似乎忽略了我在引擎连接字符串中放入的任何内容(尽管 read_sql 方法似乎可以很好地提取它。
【问题讨论】:
-
你用的是什么版本的熊猫?您可以尝试将表名指定为
Loader_foo吗? (带点的名称将作为表名整体使用,如果要指定架构有schema关键字) -
嗨@joris,我正在使用pandas 0.16.2。您删除虚线名称的提示(从
MyDB.dbo.Loader_foo切换到Loader_foo有效,谢谢。此外,我可以在 DSN 和直接服务器名称之间切换,并且它可以工作。谢谢! -
顺便说一句,chunksize 参数需要一个 int,而不是字符串 ->
chunksize=10000
标签: python sql-server pandas sqlalchemy