Python中的SQL大容量插入

问题描述

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

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

@H_404_4@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()

解决方法

怎么样?

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

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