【问题标题】:Inserting UNICODE into sqlite3将 UNICODE 插入 sqlite3
【发布时间】:2015-05-07 07:41:17
【问题描述】:

我正在尝试读取文件,使用 python 2.7 解析数据,并将数据导入 sqlite3。但是,我在插入数据时遇到了问题。解析文件中的一行后,字符串中的 é 将替换为 \xe9。从我的文件中拆分该行后,我想要一个包含 [73,'Misérables, Les'] 的列表,但我得到的是 [73,'Mis\xe9rables, Les'] ,它搞砸了 SQL INSERT 语句。我怎样才能解决这个问题?

#!/usr/bin/python
# -*- coding: latin-1 -*-
import sqlite3
line = '73::Misérables, Les'.decode('latin-1')
vals = line.split("::")

con = sqlite3.connect('myDb.db')
cur = con.cursor()
cur.execute("DROP TABLE IF EXISTS movie")
cur.execute('CREATE TABLE movie (id INT, title TEXT)')
sql = 'INSERT INTO movie VALUES (?,?)'
cur.execute(sql,tuple(vals))

cur.execute('SELECT * FROM movie')
for record in cur:
    print record

【问题讨论】:

  • 两个列表完全相同。
  • 另外,line = u'73::Misérables, Les'
  • 你为什么使用古老的 Python 2?在 Python 3 中,很多事情都变得更好了,例如,默认情况下,字符串支持 Unicode。
  • SQL INSERT 语句不应该是:INSERT INTO movie Values (73,'Misérables, Les') 而不是 INSERT INTO movie Values (73,'Mis\xe9rables, Les')
  • docs.python.org/3.4/library/sqlite3.html 有一些关于此的信息。搜索 text_factory。

标签: python unicode sqlite


【解决方案1】:

您的程序完美地将数据插入到数据库中。它随后检索正确的数据。你的问题是当你显示结果时。

当你打印一个元组时,系统会显示每个项目的repr(),而不是每个项目的str()。因此,您会在输出中看到 \xe9 而不是 é

要得到你想要的,试着在你的程序结束时替换循环:

for record in cur:
    print record[0], record[1]

【讨论】:

    猜你喜欢
    • 2021-01-07
    • 2017-02-11
    • 2019-01-12
    • 2020-06-10
    • 2022-01-21
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多