Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SQLAlchemy/pandes to_sql for SQLServer——在主数据库中创建表_Python_Sql Server_Pandas_Sqlalchemy - Fatal编程技术网

Python SQLAlchemy/pandes to_sql for SQLServer——在主数据库中创建表

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 =

使用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\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")