首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python&litesql: unicode,utf8,如何正确地完成它?

Python&litesql: unicode,utf8,如何正确地完成它?
EN

Stack Overflow用户
提问于 2016-06-21 17:02:35
回答 1查看 948关注 0票数 0

我有一个csv文件编码为utf8,它有一些重音字符,比如Ningún,如果我使用标准的.read() python函数读取这些行,然后打印结果,它按照预期工作,它正确地打印重音字符。

现在,我想将这些行插入到sqlite数据库中。生成的SQL命令将是INSERT INTO x VALUES ('Ningún'),但是数据库中存储的值是Ningún。当我从数据库中获取值时,它将给我Ningún

我知道这是一个与经济有关的问题,那我该怎么办呢?如果我做了一个encode('utf-8'),它会产生同样的结果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-21 17:37:59

一切都应该正常运作。csv.reader()将其输入行解码为具有Unicode感知的strsqlite3.execute接受str作为它的输入类型。考虑一下这个项目:

代码语言:javascript
复制
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])

示例输入文件:

代码语言:javascript
复制
49,Ningún

结果:

代码语言:javascript
复制
$ python3 x3.py 
<class 'str'> Ningún
<class 'str'> Ningún
$ sqlite3 sample.db 'select * from names'
49|Ningún

请注意,从数据库中检索到的名称与插入到数据库中的名称相同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37950466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档