在表名中使用sqlite3中的unicode时解码错误

时间:2016-10-11 20:00:00

标签: python unicode sqlite pyqt4

在访问数据库时使用带有PyQt4的sqlite3时遇到问题。 我有一个表单,我从中读取字符串:

Name = str(self.PopupWidget.QLineEdit_field.text().toUtf8()).strip()

我输入QLineEdit_field的字符串是“±”,在unicode中转换为0xc4 0x85。 现在,我创建一个表:

db.execute("CREATE TABLE table_name(field1 TEXT, field2 REAL,....);".replace('table_name',Name))
db.commit()

这完全没问题。 然后我将数据插入表中:

db.execute("INSERT INTO '%s' VALUES ('%s','%f',...);" %(Name,data1,data2...))

这也很好(它在我的小部件和外部数据库资源管理器中显示)。当我尝试从表中提取单个字段时:

db.execute("select field1 from '%s';" %(Name))
records = [a[0]for a in db.fetchall()]

它也很完美。但后来我尝试从表中的一行访问所有数据:

db.execute("SELECT * FROM '%s' WHERE field1 = '%s';" %(Name,data1))

这会导致错误:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 0: ordinal not in range(128)

我尝试了不同的方法,但没有任何效果,它总是导致此错误。可能是什么原因造成的?

::::解决::::

...有点儿。当我尝试使用与创建表时相同的语法:

db.execute("SELECT * FROM table1 WHERE field1 = 'table2';".replace('table1',Name).replace('table2',data1))

它运作正常。我不知道为什么,我认为这不是一个有效的解决方案,但至少它是有效的。

0 个答案:

没有答案