Python 连接到sql server
我得到了以下代码。问题是我可以使用panda.read_sql读取数据,但是我不能使用DataFrame.to_sql()函数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
%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我使用了替换选项,它给出了相同的错误。Pandato_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的问题,而你的评论是唯一一个处理了我需要的所有信息的评论。非常感谢你终于拯救了我的夜晚!