Python将CSV导入SQL Server
我正在尝试使用Python将CSV文件插入SQL Server Express 我提到了,但我还是不能让它工作。我在CSV文件中有24个列名,数据库表已经在SQL中创建。表名为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
[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中的内容。在Python2map
中提供了list
但在Python3中,它提供了对象map
,有时您必须使用list()
将其转换为list。-例如,len(list(headers))
或headers=list(map(…)
BTW:objectstr
有方法str.strip()
而不是map((lambda x:x.strip()),header)
你可以做map(str.strip,header)