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

时间:2018-01-12 00:10:27

标签: python mysql python-3.x mysql-connector

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

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")

2 个答案:

答案 0 :(得分:1)

当没有记录与搜索匹配时,cursor.fetchone()抛出一个None 所以,你的'结果'是无 因此,当您尝试使用result [0]深入挖掘'结果'时会出现错误 最好放置空检查。

答案 1 :(得分:0)

看起来您的陈述if cursor.rowcount == 0:正在返回false(并且您正落入您的其他区块),即使没有该用户的门票,否则您将无法到达第22行。我会接受看看cursor.rowcount在这种情况下实际返回的内容。