Python将CSV导入SQL Server

Python将CSV导入SQL Server,python,sql-server,csv,insert,Python,Sql Server,Csv,Insert,我正在尝试使用Python将CSV文件插入SQL Server Express 我提到了,但我还是不能让它工作。我在CSV文件中有24个列名,数据库表已经在SQL中创建。表名为[dev].[dbo].[Cust] 这就是我现在犯的错误 回溯(最近一次呼叫最后一次): 文件“C:\Test\Cust.py”,第5行,在 my_cursor=cnxn.cursor() 名称错误:未定义名称“cnxn” 列名是 Schedule Date, Schedule In, Schedule Out, Sch

我正在尝试使用Python将CSV文件插入SQL Server Express

我提到了,但我还是不能让它工作。我在CSV文件中有24个列名,数据库表已经在SQL中创建。表名为
[dev].[dbo].[Cust]

这就是我现在犯的错误

回溯(最近一次呼叫最后一次):
文件“C:\Test\Cust.py”,第5行,在
my_cursor=cnxn.cursor()
名称错误:未定义名称“cnxn”

列名是

Schedule Date, Schedule In, Schedule Out, Schedule Area, Cust/Non Cust, 
account, Account ID, Last Name, Company Abbr, Company Name, Account Code, 
ADT, Supervisor, position, Available Open Time, Events, 8 - 11 am, 11 - 2 pm, 
2 - 5 pm, 5 - 8 pm, 8 - 11 pm, All Day, Total available, Comment
任何帮助都将不胜感激

import pyodbc
import csv

# DESTINATION CONNECTION
my_cursor = cnxn.cursor()
my_cnxn = pyodbc.connect('Driver=SQL Server;'
                      'Server=#######\SQLEXPRESS;'
                      'Database=DEV;'
                      'Trusted_Connection=yes;')
                      
print("Connected")

def insert_records(table, yourcsv, cursor, cnxn):
    #INSERT SOURCE RECORDS TO DESTINATION
    with open(yourcsv) as csvfile:
        csvFile = csv.reader(csvfile, delimiter=',')
        header = next(csvFile)
        headers = map((lambda x: x.strip()), header)
        insert = 'INSERT INTO {} ('.format(table) + ', '.join(headers) + ') VALUES ({})' \
        .format(', '.join(len(headers) * '?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?'))  #                                   Add parameter placeholders as ?

        for row in csvFile:
            values = map((lambda x: x.strip()), row)  # No need for the quotes
            cursor.execute(insert, values)  # Pass the list of values as 2nd argument
            conn.commit()

table = 'Cust'
mycsv = 'C:\test\Cust.csv' # SET YOUR FILEPATH
insert_records(table, mycsv, my_cursor, my_cnxn)
cursor.close()

首先使用my_cnxn=pyodbc.connect(…),然后使用my_cursor=my_cnxn.cursor()。首先,您必须连接到数据库以获取游标。不要忘记使用
my_cnxn
而不是
cnxn
谢谢您的快速回复!我做了改变,现在我又犯了一个新的错误,有什么原因吗?文件“C:\Test\Cust.py”,第33行,插入_记录(表格,mycsv,my_光标,my_cnxn)文件“C:\Test\Cust.py”,第23行,插入_记录。格式(',')。连接(len(标题)*',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)));;,添加参数占位符作为?TypeError:map类型的对象没有len(),如果您有新问题,那么您应该在新页面上创建新问题,这样您就有了新的代码和描述位置。而且它会更容易阅读。如果您有错误,那么首先可以使用
print(…)
print(type(…)
查看变量中的内容。错误显示
len(headers)
的问题,然后首先检查
headers中的内容。在Python2
map
中提供了
list
但在Python3中,它提供了对象
map
,有时您必须使用
list()
将其转换为list。-例如,
len(list(headers))
headers=list(map(…)
BTW:object
str
有方法
str.strip()
而不是
map((lambda x:x.strip()),header)
你可以做
map(str.strip,header)