【问题标题】:More Efficient Way To Insert Dataframe into SQL Server将数据框插入 SQL Server 的更有效方法
【发布时间】:2022-01-09 03:18:41
【问题描述】:

我正在尝试使用 Pandas 数据框中的更新信息更新 SQL 表。

我有大约 100,000 行要迭代,这需要很长时间。任何方式我都可以让这段代码更有效率。我什至需要截断数据吗?大多数行可能是相同的。

 conn = pyodbc.connect ("Driver={xxx};"
            "Server=xxx;"
            "Database=xxx;"
            "Trusted_Connection=yes;")
cursor = conn.cursor()
cursor.execute('TRUNCATE dbo.Sheet1$') 

for index, row in df_union.iterrows():
    print(row)
    cursor.execute("INSERT INTO dbo.Sheet1$ (Vendor, Plant) values(?,?)", row.Vendor, row.Plant)

更新:这就是我最终要做的。

 params = urllib.parse.quote_plus(r'DRIVER={xxx};SERVER=xxx;DATABASE=xxx;Trusted_Connection=yes')

conn_str = 'mssql+pyodbc:///?odbc_connect={}'.format(params)
engine = create_engine(conn_str)
df = pd.read_excel('xxx.xlsx')
print("loaded")
df.to_sql(name='tablename',schema= 'dbo', con=engine, if_exists='replace',index=False, chunksize = 1000, method = 'multi')

【问题讨论】:

标签: python sql sql-server pandas


【解决方案1】:

不要使用forcursors,只使用SQL

insert into TABLENAMEA (A,B,C,D) 
select A,B,C,D from TABLENAMEB

查看此链接以查看另一个演示: https://www.sqlservertutorial.net/sql-server-basics/sql-server-insert-into-select/

您只需要更新此部分即可运行正常插入

conn = pyodbc.connect ("Driver={xxx};"
            "Server=xxx;"
            "Database=xxx;"
            "Trusted_Connection=yes;")
cursor = conn.cursor()
cursor.execute('insert into TABLENAMEA (A,B,C,D) select A,B,C,D from TABLENAMEB') 

你不需要将数据集存储在变量中,直接像普通SQL一样运行查询,性能会比迭代更好

【讨论】:

  • 谢谢,但需要用 Python 完成。
  • 我会分享一个例子,给我一些时间
  • 谢谢恩里克!
猜你喜欢
  • 2019-01-05
  • 2016-12-29
  • 1970-01-01
  • 1970-01-01
  • 2021-10-27
  • 2020-06-12
  • 2017-03-17
  • 1970-01-01
  • 2018-01-10
相关资源
最近更新 更多