簡體   English   中英

在PyQt5中的MySQL表上執行QSqlQuery的問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM