【问题标题】:SQL Bulk Insert in PythonPython 中的 SQL 批量插入
【发布时间】:2020-09-15 12:23:11
【问题描述】:

我有一个 Python 脚本,它可以导入 Excel 数据、格式化几列/行并将结果保存为 CSV。然后将此 CSV 移动到服务器目录(通过脚本),以便我可以运行 SQL Bulk INSERT 查询以将其内容填充到 SQL 表中。 但是,我的脚本在保存 CSV 时会将当前日期附加到文件名。如何编辑代码的 Bulk INSERT 部分以确保每次运行脚本时都能捕获此文件名,这样我就不必手动编辑 SQL 部分?我知道我可以省略附加部分,但出于审计目的我需要它。

这是我脚本的相关部分(带有 *** 的 SQL 部分表示我希望自动捕获新名称的位置(例如 testdata_15092020.csv)):

import os
import pandas as pd
import shutil
import glob
import pyodbc

os.system("cls")

# ...Multiple formatting steps...

currenttime = pd.to_datetime('today').strftime('%d%m%Y')
join.to_csv("testdata_" + currenttime + ".csv", index=False)

for CSVfile in glob.iglob(os.path.join('CURRENT WORKING DIRECTORY', "*.csv")):
    shutil.copy(CSVfile, 'SQL SERVER FILE DIRECTORY')

# ...Connection to SQL Database section...

cursor.execute("""BULK INSERT testdb.dbo.scriptresults
               FROM '\\\SERVERNAME\\TESTFILES\\***.csv' 
               WITH
               (
                 FIRSTROW = 2,
                 FIELDTERMINATOR = ',',
                 ROWTERMINATOR = '\n'
                 );""")
cnxn.commit()

【问题讨论】:

  • 问题:为什么要将数据插入master 数据库? master 不应该用于用户对象,除非您打算将它们设为系统对象。
  • 仅以它为例,我将使用替代数据库。编辑原始问题

标签: python sql-server csv pyodbc bulkinsert


【解决方案1】:

这个怎么样?

file_name = "testdata_" + currenttime + ".csv"

cursor.execute("""BULK INSERT master.dbo.scriptresults
               FROM '\\\SERVERNAME\\TESTFILES\\""" + file_name + """' 
               WITH
               (
                 FIRSTROW = 2,
                 FIELDTERMINATOR = ',',
                 ROWTERMINATOR = '\n'
                 );""")

【讨论】:

  • 感谢 Jurez 在玩了我的 .to_csv 部分后工作!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-24
  • 2016-01-31
  • 2013-02-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多