[英]Issue with executing QSqlQuery on MySQL table in PyQt5
我認為使用PyQt5時存在初學者問題。 我想在MySQL數據庫上運行查詢。 我的查詢字符串包含國際字符,例如“±śćźż”。
我正在使用Python
3.6.1, MySQL
5.7.18和PyQt
5.8.2。
我的部分代碼:
db = QSqlDatabase.addDatabase("QMYSQL")
db.setHostName("127.0.0.1")
db.setUserName("root")
db.setPassword("xxxxxx")
db.setDatabaseName("test")
db.setPort(3306)
if db.isOpen() != True:
db.open()
query = QSqlQuery()
query.exec_("INSERT INTO table1 (id) VALUES ('ąśćźżęłó1');")
db.close()
print(query.lastError().text())
print(query.lastQuery())
輸出: Incorrect string value: '\\xB9\\x9C\\xE6\\x9F\\xBF\\xEA...' for column 'id' at row 1 QMYSQL: Unable to execute query INSERT INTO table1 (id) VALUES ('ąśćźżęłó1');
創建表的語句:
CREATE TABLE `table1` (
`id` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
mysql的所有字符集和排序規則變量都設置為utf8mb4。
當我使用PyQt5以外的其他程序包連接數據庫PyMySQL
,我沒有遇到此問題。 在PyMySQL
我將charset = "utf8mb4"
為連接字符串的一部分。 我現在不知道如何使用QSqlDatabase
。
您能幫我解決這個問題嗎?
十六進制表示可能是cp1250
編碼的。 找出字節來自哪里,也許是終端,也許是html形式,也許是python。 這是我關於Python的筆記 ; 第一行可能是問題所在。 也許其他技巧之一就是問題。
對於utf8mb4(或utf8), ąśćźżęłó1
應該為十六進制C485 C59B C487 C5BA C5BC C499 C582 C3B3 31
對於cp1250,我希望使用十六進制B9 9C E6 9F BF EA B3 F3 31
。
在sqlserver上,您需要在Unicode字符串前面放置一個U:
可能是同樣的問題嗎?
query.exec _(“ INSERT INTO table1(id)VALUES(N'ąśćźżęłó1');”)
(編輯2017-05-02:我弄錯了,N是要加上的前綴)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.