我正在尝试构建自动报告。在我开始轮班之前,大多数数据都是通过网络抓取来提取的。然后,该程序进入一个循环,在其中使用以下提供的功能每五分钟检查一次数据。有一个我无法抓取的数据集,所以我设置了一个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()
答案 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()