繁体   English   中英

Python到SQL Server插入

[英]Python to SQL Server Insert

我正在尝试按照将Panda数据框插入到此处提到的SQL Server的方法,因为它似乎是导入大量行的最快方法。

但是我正在努力搞清楚连接参数。 我没有使用DSN,我有一个服务器名称,一个数据库名称,并使用可信连接(即Windows登录)。

import sqlalchemy
import urllib

server = 'MYServer'
db = 'MyDB'

cxn_str = "DRIVER={SQL Server Native Client 11.0};SERVER=" + server +",1433;DATABASE="+db+";Trusted_Connection='Yes'"
#cxn_str = "Trusted_Connection='Yes',Driver='{ODBC Driver 13 for SQL Server}',Server="+server+",Database="+db

params = urllib.parse.quote_plus(cxn_str)
engine = sqlalchemy.create_engine("mssql+pyodbc:///?odbc_connect=%s" % params)
conn = engine.connect().connection
cursor = conn.cursor()

我只是不确定指定连接字符串的正确方法是什么。 有什么建议么?

我一直在使用pandas和SQL服务器一段时间,我发现在表中插入大量数据的最快方式就是这样:

您可以使用以下方法创建临时CSV:

df.to_csv('new_file_name.csv', sep=',', encoding='utf-8')

然后使用pyobdcBULK INSERT Transact-SQL:

import pyodbc

conn = pyodbc.connect(DRIVER='{SQL Server}', Server='server_name', Database='Database_name', trusted_connection='yes')
cur = conn.cursor()

cur.execute("""BULK INSERT table_name
               FROM 'C:\\Users\\folders path\\new_file_name.csv'
               WITH
               (
                   CODEPAGE = 'ACP',
                   FIRSTROW = 2,
                   FIELDTERMINATOR = ',',
                   ROWTERMINATOR = '\n'
               )""")
conn.commit()

cur.close()
conn.close()

然后你可以删除文件:

import os 
os.remove('new_file_name.csv')

这是第二次将大量数据一次性收费到SQL Server中。 我希望这会给你一个想法。

注意:不要忘记为索引指定一个字段。 当我开始使用这个大声笑时,这是我的错误。

连接字符串参数值不应括在引号中,因此您应使用Trusted_Connection=Yes而不是Trusted_Connection='Yes'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM