我正在为现有的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")
答案 0 :(得分:1)
当没有记录与搜索匹配时,cursor.fetchone()抛出一个None 所以,你的'结果'是无 因此,当您尝试使用result [0]深入挖掘'结果'时会出现错误 最好放置空检查。
答案 1 :(得分:0)
看起来您的陈述if cursor.rowcount == 0:
正在返回false(并且您正落入您的其他区块),即使没有该用户的门票,否则您将无法到达第22行。我会接受看看cursor.rowcount
在这种情况下实际返回的内容。