确定何时没有数据库行与python mysql.connector匹配

iqih9akk  于 2021-06-25  发布在  Mysql
关注(0)|答案(2)|浏览(310)

我正在为现有的mysql数据库构建一个新的python3接口。名为“tickets”的表可能包含或不包含特定成员的行。如果票号存在的话,我就去拿,如果没有,我就去做别的事情。我的代码如下所示:

  1. import mysql.connector
  2. config = {
  3. 'user': 'XXXXXXXXXXXXX',
  4. 'password': 'XXXXXXXXXXXXX',
  5. 'host': 'XXXXXXXXXXXXX',
  6. 'database': 'XXXXXXXXXXXXX',
  7. 'raise_on_warnings': True
  8. }
  9. membernum = 9
  10. db = mysql.connector.connect(**config)
  11. if db.is_connected():
  12. cursor = db.cursor()
  13. query = "SELECT ticketnum FROM Tickets WHERE membernum={} limit 1".format(membernum)
  14. cursor.execute(query)
  15. if cursor.rowcount == 0:
  16. print("No results")
  17. else:
  18. result = cursor.fetchone()
  19. ticketnum = result[0]
  20. print(ticketnum)
  21. cursor.close
  22. db.close
  23. else:
  24. print("Connection error")

如果有一个与该成员匹配的记录,那么它工作得很好。如果不是,则生成:

  1. Traceback (most recent call last):
  2. File "/Users/Gary/IPPS/samplecode.py", line 22, in <module>
  3. ticketnum = result[0]
  4. TypeError: 'NoneType' object is not subscriptable

我做错什么了?
更新
murphy1310的回答解决了!我将代码更改为以下内容,效果很好:

  1. import mysql.connector
  2. config = {
  3. 'user': 'XXXXXXXXXXXXX',
  4. 'password': 'XXXXXXXXXXXXX',
  5. 'host': 'XXXXXXXXXXXXX',
  6. 'database': 'XXXXXXXXXXXXX',
  7. 'raise_on_warnings': True
  8. }
  9. membernum = 9
  10. db = mysql.connector.connect(**config)
  11. if db.is_connected():
  12. cursor = db.cursor()
  13. query = "SELECT ticketnum FROM Tickets WHERE membernum={} limit 1".format(membernum)
  14. cursor.execute(query)
  15. result = cursor.fetchone()
  16. if result != None:
  17. ticketnum = result[0]
  18. print(ticketnum)
  19. else:
  20. print("No results")
  21. cursor.close
  22. db.close
  23. else:
  24. print("Connection error")
pengsaosao

pengsaosao1#

当没有与搜索匹配的记录时,cursor.fetchone()抛出一个none。
所以,你的“结果”是零。
因此,当您试图使用result[0]更深入地挖掘“result”时会出现错误。
你最好放空支票。

8fsztsew

8fsztsew2#

看来你的陈述 if cursor.rowcount == 0: 即使用户没有票,也返回false(并且您陷入了else块),否则您将无法到达第22行。我想看看什么 cursor.rowcount 在这种情况下,他实际上是回来了。

相关问题