2017-05-24 19 views
1

私は数多くの例を探しましたが、私の特定の問題を解決できませんでした。時間を割いてくれてありがとう、私の人生がこれを回避する方法を見つけることができないように私はできない。私はPythonでforループを使用してAzure SQL ServerデータベースにCSVファイルを挿入しようとしています。私はこの同じpythonプログラムを何回も使用して、複数の異なるCSVファイルを作成するので、根本的な問題はこの現在のCSVであることがわかります。以下は、私のPythonコードの簡単なスニペットと、エラーです。このエラーが発生しなくなるようにCSVをエンコードするにはどうすればよいですか(前述のように、複数の同様のスレッドから解決策を試しており、これを解決できませんでした)。'ascii'コーデックはデコードできません - CSV to SQL Server to pyodbc

コード:

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) 

は、すべての助けをありがとうございました。

も ​​- 私はややまだだと私は任意のヘルプやアドバイスを

おかげで再びバルクローカルのSQL ServerデータベースにこのCSVを挿入し、エラーを受けてきた「オペレーティングシステムエラーコード(ヌル)」を試してみました新しいことを学び、可能な限り学ぶことができます。

答えて

2

CSVファイルに 'ascii'コーデックで処理できない文字が含まれているのは初めてです。 0x96latin1文字セットの文字の1つではないので、次の最も可能性の高い候補はおそらくwindows-1252であり、0x96は "Enダッシュ"文字(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') 
関連する問題