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

Determining when no database rows match with Python mysql.connector

我正在为现有 mySQL 数据库构建一个新的 Python 3 接口。名为 "Tickets" 的 table 可能包含也可能不包含特定成员的行。我正在尝试获取票号(如果存在),如果不存在则执行其他操作。我的代码如下所示:

import mysql.connector

config = {
  'user': 'XXXXXXXXXXXXX',
  'password': 'XXXXXXXXXXXXX',
  'host': 'XXXXXXXXXXXXX',
  'database': 'XXXXXXXXXXXXX',
  'raise_on_warnings': True
}

membernum = 9

db = mysql.connector.connect(**config)
if db.is_connected():
    cursor = db.cursor()
    query = "SELECT ticketnum FROM Tickets WHERE membernum={} limit 1".format(membernum)
    cursor.execute(query)
    if cursor.rowcount == 0:
        print("No results")
    else:
        result = cursor.fetchone()
        ticketnum = result[0]
        print(ticketnum)
    cursor.close
    db.close
else:
    print("Connection error")

如果有与该成员匹配的记录,效果会很好。如果没有,它会生成:

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

我做错了什么?

更新

murphy1310 的回答解决了!我将代码更改为以下内容,它工作得很好:

import mysql.connector

config = {
  'user': 'XXXXXXXXXXXXX',
  'password': 'XXXXXXXXXXXXX',
  'host': 'XXXXXXXXXXXXX',
  'database': 'XXXXXXXXXXXXX',
  'raise_on_warnings': True
}

membernum = 9

db = mysql.connector.connect(**config)
if db.is_connected():
    cursor = db.cursor()
    query = "SELECT ticketnum FROM Tickets WHERE membernum={} limit 1".format(membernum)
    cursor.execute(query)
    result = cursor.fetchone()
    if result != None:
        ticketnum = result[0]
        print(ticketnum)
    else:
        print("No results")
    cursor.close
    db.close
else:
    print("Connection error")

看起来你的语句 if cursor.rowcount == 0: 正在返回 false(并且你正在进入你的 else 块)即使没有用户的票,否则你不会到达第 22 行。我会看看 cursor.rowcount 在这种情况下实际返回的是什么。

当没有记录匹配搜索时,cursor.fetchone() 抛出 None.
所以,你的 'result' 是 None.
因此,当您尝试使用 result[0].
深入研究 'result' 时出现错误 最好进行空检查。