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

Posted

技术标签:

【中文标题】确定何时没有数据库行与 Python mysql.connector 匹配【英文标题】:Determining when no database rows match with Python mysql.connector 【发布时间】:2018-06-21 09:55:53 【问题描述】:

我正在为现有的 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")

【问题讨论】:

【参考方案1】:

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

【讨论】:

看起来就是这样!我将代码更改为以下代码,效果很好:cursor.execute(query) result = cursor.fetchone() if result != None: ticketnum = result[0] print(ticketnum) else: print("No results") 我确实赞成这个答案,但我是新手,还没有 15 个代表,所以我的赞成票不算数:(【参考方案2】:

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

【讨论】:

以上是关于确定何时没有数据库行与 Python mysql.connector 匹配的主要内容,如果未能解决你的问题,请参考以下文章

如何确定 DST 何时在 Python 中的特定位置开始或结束? [复制]

使用 MySQL 数据填充 div,将行与编号 ID 匹配

确定 PHP 脚本的命令行与 http 执行的规范方法是啥?

有没有办法确定 CSS 解析/渲染何时完成?

2.python基础知识 行与缩进注释多行语句

确定何时解除 UIMenuController?