[英]python & litesql: unicode, utf8, how to do it properly?
我有一个编码为utf8的csv文件,它包含一些带重音的字符,例如Ningún
如果我使用标准的.read()
python函数读取这些行.read()
,然后打印结果,它可以按预期工作,可以正确打印带重音的字符。
现在,我想将这些行插入到sqlite数据库中。 产生的SQL命令将为INSERT INTO x VALUES ('Ningún')
,但是存储在数据库中的值为Ningún
。 当我从数据库中获取值时,它将给我Ningún
。
我知道这是一个与环保有关的问题,那我该怎么办? 如果我执行encode('utf-8')
它将产生相同的结果。
一切都应该正常工作。 csv.reader()
其输入行解码为可csv.reader()
Unicode的str
。 sqlite3.execute
接受str
作为其输入类型。 考虑以下程序:
import csv
import sqlite3
with sqlite3.connect('sample.db') as conn:
conn.execute('drop table if exists names')
conn.execute('create table names (age INT, name TEXT)')
with conn:
with open('x.csv') as input_file:
input_file = csv.reader(input_file)
for line in input_file:
print(type(line[1]), line[1])
conn.execute('insert into names values(?,?)', line)
for line in conn.execute('select * from names'):
print(type(line[1]), line[1])
输入文件样本:
49,Ningún
结果:
$ python3 x3.py
<class 'str'> Ningún
<class 'str'> Ningún
$ sqlite3 sample.db 'select * from names'
49|Ningún
请注意,从数据库检索的名称与插入数据库的名称相同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.