1 問題点
Python3にて、データをcsvに書き込み実施時にエラーが発生する。
test.py(関係あるコードのみを掲載)
def db_dump(c):
sql_com='SELECT * FROM STOCK_INFO ORDER BY STOCK_NUM ASC'
tmp=c.execute(sql_com)
with open(setting.CSV_DB_PATH,'w') as f:
writer=csv.writer(f)
writer.writerows(tmp)
上記のコードを使い、データをcsvファイルに書き込みを行う時にエラーが発生する。
root@2a1627805ea9:/home/stock# python3 sqltest.py 9
7
Traceback (most recent call last):
File "sqltest.py", line 105, in <module>
db_dump(cur)
File "sqltest.py", line 56, in db_dump
writer.writerows(tmp)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 5-12: ordinal not in range(128)
デフォルトではasciiでエンコードされるが、扱っている文字列はasciiでは扱えないためエラーが発生しています。自分の環境では、扱っている文字はutf-8で扱えるようです。
2 解決策
csvファイルをオープンするときに、encoding='utf-8'を記載することで、扱う文字コードをutf-8に指定できます。
with open(setting.CSV_DB_PATH,'w',encoding='utf-8') as f:
test.py(修正版)
def db_dump(c):
sql_com='SELECT * FROM STOCK_INFO ORDER BY STOCK_NUM ASC'
tmp=c.execute(sql_com)
with open(setting.CSV_DB_PATH,'w',encoding='utf-8') as f:
writer=csv.writer(f)
writer.writerows(tmp)
上記を実施すると無事にcsvファイルにデータを書き込むことができました。