gpt4 book ai didi

python - “ascii”编解码器无法解码 - 通过 pyodbc 将 CSV 转换为 SQL Server

转载 作者:行者123 更新时间:2023-12-01 02:56:41 25 4
gpt4 key购买 nike

我搜索了很多例子,但没有一个能够解决我的具体问题。感谢您抽出时间,因为我一生都无法找到解决此问题的方法。我正在尝试使用 Python 中的 for 循环将 CSV 文件插入到 Azure SQL Server 数据库中。我已经多次使用同一个 python 程序来处理多个不同的 CSV 文件,所以我知道根本问题在于当前的 CSV。下面是我的 Python 代码的简短片段以及错误。如何对 CSV 进行编码,以便不再发生此错误(如前所述,我已经尝试了多个类似线程的解决方案,但无法解决此问题)。

代码:

   csvfile = open('C:\\file.csv', 'r')
csv_data = csv.reader(csvfile)

SQL = """Insert into Idea_Pipeline( [col_1], [col_2], [col_3], [col_4])
values (?,?,?,?)

for row in csv_data:
first_row = next(csv_data)
cursor2.execute(SQL, row)

如上所述,这只是我的代码片段,但是我已经使用过多次,所以我知道语法是正确的。以下是我无法解决的错误。

错误:

Traceback (most recent call last):
File "Idea_Pipeline.py", line 46, in <module>
cursor2.execute(SQL, row)
UnicodeDecodeError: 'ascii' codec can't decode byte 0x96 in position 114:
ordinal not in range(128)

再次非常感谢您的帮助。

此外 - 我已尝试将此 CSV 批量插入本地 SQL Server 数据库,但收到错误“操作系统错误代码(空)”

再次感谢您的任何帮助或建议,因为我还是个新手,并且正在尝试尽可能多地学习。

最佳答案

听起来这是您的 CSV 文件第一次包含“ascii”编解码器无法处理的字符。 0x96 不是 latin1 字符集中的字符之一,因此下一个最可能的候选字符可能是 windows-1252,其中 0x96 代表“En Dash”字符 (U+2013)。如果是这样的话

# -*- coding: windows-1252 -*-
import csv
import pyodbc
import sys
print("Python version " + sys.version)
print("pyodbc version " + pyodbc.version)
cnxn = pyodbc.connect("DSN=myDb", autocommit=True)
crsr = cnxn.cursor()
crsr.execute("CREATE TABLE #foo (id INT PRIMARY KEY, txtcol VARCHAR(50))")

with open(r'C:\Users\gord\Desktop\sample.csv', 'rb') as csvfile:
csv_data = csv.reader(csvfile)
sql = "Insert into #foo ([id], [txtcol]) VALUES (?,?)"
print("")
print("Rows retrieved from CSV file:")
for row in csv_data:
print(row)
crsr.execute(sql, [cell.decode('windows-1252') for cell in row])
print("")
print("Values retrieved from table:")
for row in crsr.execute("SELECT * FROM #foo").fetchall():
print(row)
cnxn.close()

将产生以下输出

Python version 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:42:59) [MSC v.1500 32 bit (Intel)]
pyodbc version 4.0.16

Rows retrieved from CSV file:
['1', 'foo']
['2', 'test\x96data']

Values retrieved from table:
(1, u'foo')
(2, u'test\u2013data')

关于python - “ascii”编解码器无法解码 - 通过 pyodbc 将 CSV 转换为 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44165079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com