Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.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 连接到sql server_Python_Sql_Sql Server_Pandas - Fatal编程技术网

Python 连接到sql server

Python 连接到sql server,python,sql,sql-server,pandas,Python,Sql,Sql Server,Pandas,我得到了以下代码。问题是我可以使用panda.read_sql读取数据,但是我不能使用DataFrame.to_sql()函数 %matplotlib inline import pandas as pd import pyodbc from datetime import datetime import numpy as np import matplotlib.pyplot as plt pd.set_option('display.max_rows', 50) pd.set_option

我得到了以下代码。问题是我可以使用panda.read_sql读取数据,但是我不能使用DataFrame.to_sql()函数

%matplotlib inline
import pandas as pd
import pyodbc
from datetime import datetime
import numpy as np
import matplotlib.pyplot as plt

pd.set_option('display.max_rows', 50)
pd.set_option('display.max_columns', 15)
pd.set_option('precision', 4)

conn = pyodbc.connect(r"Driver={SQL Server};Server=dev;Database=test1")

data = pd.read_sql_query(
    """
SELECT *
FROM   sys.tables
    """
    , con = conn)

print data
data.to_sql('test', con = conn)
错误如下:

在sql“从sqlite_主节点选择名称”上执行失败,其中 type='table'和name=?;':('42S02',“[42S02][Microsoft][ODBC SQL 服务器驱动程序][SQL Server]无效的对象名称“sqlite_master”。(208) (SQLExecDirectW);[42000][Microsoft][ODBC SQL Server驱动程序][SQL 无法准备服务器]语句。(8180)”


有什么解决方法吗?

考虑创建一个sqlalchemy,并在pandas
to_sql()中使用它。
con参数:

import sqlalchemy

...
engine = sqlalchemy.create_engine(
               "mssql+pyodbc://user:pwd@server/database",
               echo=False)

data.to_sql('test', con=engine, if_exists='replace')

test
表是否存在于数据库中的
dbo
模式中?如果不是,则使用参数替换/追加。默认值为fail。@Parfait我使用了替换选项,它给出了相同的错误。Panda
to_sql
不支持MS sql Server直接连接,您需要使用sqlalchemy进行连接,如@Parfait的答案所示。如果每个数据库有多个架构,则该表由
[MySchemaName].[MyTableName]
标识。架构可以作为参数传递给\u sql,如:
my\u dataframe。传递给\u sql(name='MyTableName',con=engine,如果存在='replace',schema='MySchemaName')
,如果我没有传递架构,那么它对我不起作用。另外,为我工作的连接字符串有以下格式:
“mssql+pyodbc://?odbc_connect={}”。格式(urllib.parse.quote_plus(“DRIVER=odbc DRIVER 13 for SQL Server;Server={0};PORT=1433;DATABASE={1};UID={2};PWD={3};TDS_Version=8.0;”。格式(服务器、数据库、用户、密码))
@TPPZ。。。谢谢你的留言,未来的读者会很感激的。@TPPZ我花了将近一个小时试图通过pandas的
to_sql
通过
sqlalchemy
解决将数据帧写入MSSQL的问题,而你的评论是唯一一个处理了我需要的所有信息的评论。非常感谢你终于拯救了我的夜晚!