当表中有行时,选择语句返回空列表

时间:2019-06-28 13:36:15

标签: python mysql mariadb

我正在尝试构建自动报告。在我开始轮班之前,大多数数据都是通过网络抓取来提取的。然后,该程序进入一个循环,在其中使用以下提供的功能每五分钟检查一次数据。有一个我无法抓取的数据集,所以我设置了一个excel工作簿,可以将数据粘贴到其中,然后将数据插入到我的数据库中。

使用cli查询SELECT * FROM TableName会在Python程序获取空列表的同时返回5160 rows in set (0.089 sec)

def checkData():
    try:
        db.c.execute('SELECT * FROM TableName')
    except mariadb.Error as error:
        printc(f"Error: {error}")

    data = db.c.fetchall()
    rcount = db.c.rowcount
    logging.debug(f'No data found: {data} num rows: {rcount}')
    print(data)
    if len(data)>0:
        return True
    else:
        return False

记录输出

2019-06-28 09:00:20,817 - DEBUG - No data found: [] num rows: 0

当我仅执行checkData函数时,如果有数据,它将返回True。该程序的前面有一个db.c.execute('DELETE FROM TableName')语句。数据库是否可能正在缓存旧的响应,并且当它不再为空时,最好的方式是使它通知我?

其他信息:

包含声明

import mysql.connector as mariadb

db是的对象

class DatabaseConnection():
    def __init__(self):
        self.url = 'host'
        self.passwd = 'password'
        self.db_conn = mariadb.connect(user='user', password=self.passwd, host=self.url, database='DatabaseName')
        self.c = self.db_conn.cursor()

2 个答案:

答案 0 :(得分:0)

rowcount可以正常工作(即使在fetch_all之后,我自己也尝试过)。因此,您的查询很可能什么都不返回。

您确定您的python脚本中的数据库连接有效吗?

答案 1 :(得分:-1)

将查询的结果分配给变量,然后对该变量使用fetchall()方法。

def checkData():
    try:
        result = db.c.execute('SELECT * FROM TableName')
    except mariadb.Error as error:
        printc(f"Error: {error}")

    data = result.fetchall()