我正在尝试将数据帧保存到使用Windows身份验证的MS SQL。我尝试使用engine
,engine.connect()
,engine.raw_connection()
,它们都抛出错误:
分别为'Engine' object has no attribute 'cursor'
,'Connection' object has no attribute 'cursor'
和Execution failed on sql 'SELECT name FROM sqlite_master WHERE type='table' AND name=?;': ...
。
params = urllib.parse.quote('DRIVER={ODBC Driver 13 for SQL Server};'
'SERVER=server;'
'DATABASE=db;'
'TRUSTED_CONNECTION=Yes;')
engine = create_engine('mssql+pyodbc:///?odbc_connect=%s' % params)
df.to_sql(table_name,engine, index=False)
答案 0 :(得分:1)
这是对我的原始答案的更新。基本上,这是老派的做事方式(INSERT INTO)。我最近偶然发现了一种将数据从 Python 推送到 SQL Server 的超级简单、可扩展和可控的方法。尝试示例代码,如果您有其他问题,请回帖。
import pyodbc
import pandas as pd
engine = "mssql+pyodbc://your_server_name/your_database_name?driver=SQL Server Native Client 11.0?trusted_connection=yes"
... dataframe here...
dataframe.to_sql(x, engine, if_exists='append', index=True)
dataframe 很容易解释。
x = 您希望表在 SQL Server 中的名称。
答案 1 :(得分:0)
这完全可以满足您的要求。
# Insert from dataframe to table in SQL Server
import time
import pandas as pd
import pyodbc
# create timer
start_time = time.time()
from sqlalchemy import create_engine
df = pd.read_csv("C:\\your_path\\CSV1.csv")
conn_str = (
r'DRIVER={SQL Server Native Client 11.0};'
r'SERVER=name_of_your_server;'
r'DATABASE=name_of_your_database;'
r'Trusted_Connection=yes;'
)
cnxn = pyodbc.connect(conn_str)
cursor = cnxn.cursor()
for index,row in df.iterrows():
cursor.execute('INSERT INTO dbo.Table_1([Name],[Address],[Age],[Work]) values (?,?,?,?)',
row['Name'],
row['Address'],
row['Age'],
row['Work'])
cnxn.commit()
cursor.close()
cnxn.close()
# see total time to do insert
print("%s seconds ---" % (time.time() - start_time))