作者vanchy (vanchy)
看板Python
标题[问题] PyQt和SQLite下,执行select的问题
时间Thu May 12 11:47:50 2016
各位版友好,小弟目前在写一个小project,目的是要做portable的windows app
但目前遇到从资料库里无法select的问题,已经卡了1星期了...
以下是我的程式码,想法是:
比对输入的字串是否为空→输入字串是否在资料库里面→如果是,将该笔资料select
但是执行之後,Error显示「No query Unable to fetch row」
我很确定第一个select执行完後,result里有select出来的资料
def srh(self):
query_object = QtSql.QSqlQuery()
prod_ID = self.srh_bar.text()
result = []
if prod_ID != "":
query_object.exec_("SELECT ID FROM add_prod")
while (query_object.next()):
result.append(query_object.value(0))
print(result)
if prod_ID in result:
query_object.exec_(
"SELECT prod_name, ingre, unit_price, effect"
"FROM add_ingre AS I, add_prod AS P, mix AS M"
"WHERE I.ID = M.ingre_ID AND P.ID = M.prod_ID"
"AND P.ID = '%s'"%prod_ID)
if not query_object.exec_():
print(query_object.lastError().text())
else:
print("false")
而我也试过用place holder的方式,变成:
query_object.prepare(
"SELECT prod_name, ingre, unit_price, effect"
"FROM add_ingre AS I, add_prod AS P, mix AS M"
"WHERE I.ID = M.ingre_ID AND P.ID = M.prod_ID AND P.ID = :a")
query_object.bindValue(":a", prod_ID)
query_object.exec_()
但是这段程式码出现「Parameter count mismatch」
希望各位版友能够帮我解答,谢谢!!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.117.70.25
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1463024872.A.AE3.html
1F:→ uranusjr: 其实 Python 内建的 sqlite3 module 比 QtSql 好用很多 05/12 13:27
2F:→ uranusjr: 不过我猜问题在你的字串接合的地方没有空白 05/12 13:27
3F:→ uranusjr: "foo" "bar" => "foobar" 要写成 "foo " "bar" 才对 05/12 13:28
4F:→ vanchy: 不好意思,请问是指哪一段需要字串接合呢? 05/12 14:11
5F:→ uranusjr: prepare 里面那段, 你每一行的字串最後面都要多一个空白 05/12 15:27
6F:→ uranusjr: "SELECT prod_name, ingre, unit_price, effect " 05/12 15:27
7F:→ uranusjr: "FROM add_ingre AS I, add_prod AS P, mix AS M " 05/12 15:28
8F:→ uranusjr: "WHERE I.ID = M.ingre_ID AND ... (後面太长了)" 05/12 15:28
9F:→ os653: 建议你写成 s = 'select prod_name, ingre...(省略)' 05/12 20:30
10F:→ os653: query_object.prepare(s) 05/12 20:30
11F:→ os653: 这样写,侦错的时候直接 print(s) 会比较容易发现 05/12 20:31
12F:→ os653: 还有你的字串如果是中文,可能需要用""括起来,不是很确定 05/12 20:32
13F:→ vanchy: 感谢两位大大的帮忙,我终於解决了QAQ 05/12 22:10