我有一个csv文件编码为utf8,它有一些重音字符,比如Ningún,如果我使用标准的.read() python函数读取这些行,然后打印结果,它按照预期工作,它正确地打印重音字符。
现在,我想将这些行插入到sqlite数据库中。生成的SQL命令将是INSERT INTO x VALUES ('Ningún'),但是数据库中存储的值是Ningún。当我从数据库中获取值时,它将给我Ningún。
我知道这是一个与经济有关的问题,那我该怎么办呢?如果我做了一个encode('utf-8'),它会产生同样的结果。
发布于 2016-06-21 17:37:59
一切都应该正常运作。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请注意,从数据库中检索到的名称与插入到数据库中的名称相同。
https://stackoverflow.com/questions/37950466
复制相似问题