在访问数据库时使用带有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))
它运作正常。我不知道为什么,我认为这不是一个有效的解决方案,但至少它是有效的。