繁体   English   中英

python和litesql:Unicode,utf8,如何正确执行?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM