Подтвердить что ты не робот

Python, как проверить, пуст ли набор результатов?

У меня есть оператор sql, который не возвращает никаких обращений. Например, 'select * from TAB where 1 = 2'.

Я хочу проверить, сколько строк возвращено,

cursor.execute(query_sql)

rs = cursor.fetchall()

Здесь я получаю уже исключение: "(0," Нет набора результатов ")"

Как я могу превзойти это исключение, проверьте, пуст ли набор результатов?

4b9b3361

Ответ 1

cursor.rowcount будет установлен в 0.

Однако, если вы выполняете оператор, который никогда не вернет набор результатов (например, INSERT без RETURNING или SELECT... INTO), вам не нужно вызывать .fetchall(); для таких утверждений не будет набора результатов. Вызов .execute() достаточно для запуска оператора.

Ответ 2

MySQLdb не будет создавать исключение, если набор результатов пуст. Кроме того, функция cursor.execute() возвращает длинное значение, которое представляет собой количество строк в выбранном наборе результатов. Поэтому, если вы хотите проверить пустые результаты, ваш код может быть переписан как

rows_count = cursor.execute(query_sql)
if rows_count > 0:
     rs = cursor.fetchall()
else:
     // handle empty result set

Ответ 3

У меня были проблемы с количеством строк, которые всегда возвращали -1 независимо от того, какое решение я пробовал.

Я нашел следующую хорошую замену, чтобы проверить нулевой результат.

c.execute("SELECT * FROM users WHERE id=?", (id_num,))
row = c.fetchone()
if row == None:
   print("There are no results for this query")

Ответ 4

Примечание. Это для модуля MySQLdb в Python.

Для оператора SELECT не должно быть исключения для пустого набора записей. Просто пустой список ([]) для cursor.fetchall() и None для cursor.fetchone().

Для любого другого оператора, например. INSERT или UPDATE, который не возвращает набор записей, вы не можете называть fetchall() и fetchone() курсором. В противном случае будет создано исключение.

Существует один способ отличить два вышеперечисленных типа курсоров:

def yield_data(cursor):
    while True:
        if cursor.description is None:
            # No recordset for INSERT, UPDATE, CREATE, etc
            pass
        else:
            # Recordset for SELECT, yield data
            yield cursor.fetchall()
            # Or yield column names with
            # yield [col[0] for col in cursor.description]

        # Go to the next recordset
        if not cursor.nextset():
            # End of recordsets
            return

Ответ 5

если вы подключаетесь к базе данных postgres, следующие работы:

result = cursor.execute(query)

if result.returns_rows:
    # we got rows!
    return [{k:v for k,v in zip(result.keys(), r)} for r in result.rows]
else:
    return None

Ответ 6

Вы можете сделать следующее:

count = 0
cnxn = pyodbc.connect("Driver={SQL Server Native Client 11.0};"
                      "Server=serverName;"
                      "Trusted_Connection=yes;")
cursor = cnxn.cursor()
cursor.execute(SQL query)
for row in cursor:
    count = 1
    if true condition:
        print("True")
    else:
        print("False")
if count == 0:
    print("No Result")

Спасибо:)