Python SQLAlchemy/pandes to_sql for SQLServer——在主数据库中创建表
使用MSSQL(2012版),我使用SQLAlchemy和pandas(在Python 2.7上)将行插入SQL Server表 在使用特定服务器字符串尝试pymssql和pyodbc之后,我正在尝试odbc名称:Python SQLAlchemy/pandes to_sql for SQLServer——在主数据库中创建表,python,sql-server,pandas,sqlalchemy,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 =
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\u-foo”,引擎,如果存在=“append”,chunksize=“10000”)
通过这条语句,我得到了一个一致的错误,pandas试图在sql server Master db中创建表,这是不允许的
如何让pandas/SQLAlchemy/pyodbc指向正确的mssql数据库?to_sql方法似乎忽略了我在engine connect字符串中输入的任何内容(尽管read_sql方法似乎很好地处理了它。回答这个问题:问题是您在表名本身中指定了架构。如果您提供
“MyDB.dbo.Loader\u foo”
作为表名,pandas将把这个完整字符串解释为表名,而不仅仅是“Loader\u foo”
解决方案是只提供“Loader\u foo”
作为表名。如果需要指定要将此表写入的特定架构,可以使用架构
kwarg(请参阅):
您使用的是什么版本的pandas?您是否可以尝试将表名指定为
Loader\u foo
?(虚线名称将作为一个整体用作表名,如果您要指定一个模式,则有一个schema
关键字)嗨@joris,我使用的是pandas 0.16.2。删除虚线名称的提示(从MyDB.dbo.Loader\u foo
切换到Loader\u foo
工作,谢谢。另外,我可以在DSN和直接服务器名称之间切换,这两种方式都可以。谢谢!顺便说一句,chunksize参数需要一个int,而不是字符串->chunksize=10000
谢谢@joris…还将chunksize
捕获为int。)。
finaloutput.to_sql("Loader_foo", engine, if_exists="append")
finaloutput.to_sql("Loader_foo", engine, if_exists="append", schema="something_else_as_dbo")