Python - pypyodbc - 将CSV导入MS SQL Server

时间:2015-02-26 17:13:17

标签: python sql sql-server csv

我正在运行一个Python脚本来从CSV中获取数据并将其插入到我的MS SQL Server中。 CSV大约35 MB,包含大约200,000条记录,包含15列。 SQL Server导入工具需要不到5分钟的时间将所有数据插入到服务器中。使用pypyodbc的python脚本需要30分钟或更长时间。

我的代码错误导致这需要花费很长时间

import pypyodbc
import csv
import datetime

now = datetime.datetime.now()

cnxn = pypyodbc.connect('DRIVER={SQL Server};SERVER=;DATABASE=') 
cursor = cnxn.cursor()

cursor.execute("""
DELETE FROM DataMaster
""")
cnxn.commit()

FileName = "Data - " + str('{:02d}'.format(now.month)) + "-" + str('{:02d}'.format(now.day-1)) + "-"  + str(now.year) + ".csv"
myCSV = open(FileName)
myCSV = csv.reader(myCSV)
next(myCSV, None) # this skips the headers

listlist = list(myCSV)

cursor.executemany('''
    INSERT INTO DataMaster (Column1,Column2,Column3,Column4,Column5,Column6,Column7,Column8,Column9,Column10,Column11,Column12,Column13,Column14,Column15) 
    VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)''', 
    (
    listlist
    )
    )

cursor.commit() # commits any changes

cnxn.close() # closes the connection

print "Import Completed."

1 个答案:

答案 0 :(得分:0)

下面的代码,应该适用于您的情况。这应该不会太多时间。

import pymysql
import logging

import numpy as np
try:
        conn = pymysql.connect(hostname='', user='user', passwd='password', db='dbname', connect_timeout=5)
    except Exception as e:
        logger.error("ERROR: Unexpected error: Could not connect to MySql instance.")
        logger.error(e)
        sys.exit()

    logger.info("SUCCESS: Connection to SQL Server instance succeeded")

    local_cursor = conn.cursor()
    path ='path/*/csv' 
    for files in glob.glob(path + "/*.csv"):
        add_csv_file="""LOAD DATA LOCAL INFILE '%s' INTO TABLE tablename FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'  IGNORE 1 LINES;;;""" %(files)


        cursor.execute(add_csv_file)

cnx.commit()
cursor.close();
cnx.close();

如果有效,请选择答案。