Оператор select, возвращающий пустой список, когда в таблице есть строки - PullRequest
1 голос
/ 28 июня 2019

Я пытаюсь создать автоматизированный отчет. Большая часть данных просматривается в Интернете перед началом моей смены. Затем программа входит в цикл, где она проверяет данные каждые пять минут, используя функцию, представленную ниже. Существует один набор данных, который мне не удалось очистить, поэтому я настроил книгу Excel, в которую я могу вставить данные, чтобы затем вставить данные в свою базу данных.

С помощью запроса cli SELECT * FROM TableName он вернул 5160 rows in set (0.089 sec) в то время, когда программа python получала пустой список.

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

дБ является объектом

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 голосов
/ 28 июня 2019

rowcount работает как положено (пробовал сам, даже после fetch_all).Итак, ваш запрос, скорее всего, ничего не возвращает.

Вы уверены, что в вашем скрипте python есть действительное соединение с вашей базой данных?

0 голосов
/ 28 июня 2019

Присвойте результат запроса переменной и используйте метод fetchall () для этой переменной.

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

    data = result.fetchall()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...