Sqlite3 - 不能使用带有变音符号的字符

时间:2015-11-06 17:40:09

标签: python sqlite unicode encoding

我正在创建一个方法,该方法将名称作为参数并从Sqlite3数据库返回一行。当尝试使用非变音字符时,它可以工作。

但是,如果我尝试传递包含变音字符的string,它会引发:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 4: ordinal not in range(128)

当我尝试将相同的名称打印到控制台时,它可以正常工作。

 # -*- coding: utf-8 -*-
import sqlite3

conn = sqlite3.connect('data.db')
cur = conn.cursor()

def get_subject_by_name(name): # TODO: APROXIMATE SEARCH
    result = cur.execute("""SELECT nazov,ICO,pravna_forma,sidlo,predmet_cinnosti,den_zapisu,url_orsr FROM companies WHERE nazov LIKE ?""",('{}%'.format(name),)).fetchall()
    print result

get_subject_by_name(u"systém")

你知道问题出在哪里吗?

1 个答案:

答案 0 :(得分:1)

它来自您的format

Python 2.7.5 (default, May 15 2013, 22:44:16) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> '{}%'.format(u'syst\xe9m')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 4: ordinal not in range(128)

您正在尝试将Unicode字符串格式化为字节字符串,Python 2尝试使用默认的ascii编解码器将Unicode字符串强制转换为字节字符串。

在任何地方使用Unicode字符串:

>>> u'{}%'.format(u'syst\xe9m')
u'syst\xe9m%'

包括您的SELECT:

result = cur.execute(u"""SELECT nazov,ICO,pravna_forma,sidlo,predmet_cinnosti,den_zapisu,url_orsr FROM companies WHERE nazov LIKE ?""",(u'{}%'.format(name),)).fetchall()