Python: количество строк, на которые влияет курсор.выполнить ("выбрать …)



Как я могу получить доступ к числу строк, затронутых:



cursor.execute("SELECT COUNT(*) from result where server_state='2' AND name LIKE '"+digest+"_"+charset+"_%'")
628   6  

6 ответов:

Попробуйте использовать fetchone:

cursor.execute("SELECT COUNT(*) from result where server_state='2' AND name LIKE '"+digest+"_"+charset+"_%'")
result=cursor.fetchone()

result будет содержать кортеж с одним элементом, значением COUNT(*). Итак, чтобы найти количество строк:

number_of_rows=result[0]

Или, если вы предпочитаете сделать это одним махом:

cursor.execute("SELECT COUNT(*) from result where server_state='2' AND name LIKE '"+digest+"_"+charset+"_%'")
(number_of_rows,)=cursor.fetchone()

ПС. Кроме того, рекомендуется использовать параметризованные аргументы, когда это возможно, потому что он может автоматически цитировать аргументы для вас, когда это необходимо, и защитить от внедрения sql.

Правильный синтаксис параметризованных аргументов зависит от вашего адаптера python/database (например mysqldb, psycopg2 или sqlite3). Это будет выглядеть примерно так

cursor.execute("SELECT COUNT(*) from result where server_state= %s AND name LIKE %s",[2,digest+"_"+charset+"_%"])
(number_of_rows,)=cursor.fetchone()

Из PEP 249, который обычно реализуется API баз данных Python:

Объекты Курсора должны отвечать следующим методам и атрибутам:

[...]

.количество строк
Этот атрибут только для чтения определяет количество строк, которые являются последними .выполнить*() производятся (DQL по отчетности Как "выбрать") или пострадавшего (по инструкции DML как 'обновить' или 'вставить').

Надеюсь, что вы это имели в виду.

Количество выполненных строк возвращается из execute:

rows_affected=cursor.execute("SELECT ... ")

Конечно, как уже упоминалось в AndiDog, вы можете получить количество строк, обратившись к свойству rowcount курсора в любое время, чтобы получить количество для последнего выполнения:

cursor.execute("SELECT ... ")
rows_affected=cursor.rowcount

Из встроенной документации python MySQLdb:

 def execute(self, query, args=None):

    """Execute a query.

    query -- string, query to execute on server
    args -- optional sequence or mapping, parameters to use with query.

    Note: If args is a sequence, then %s must be used as the
    parameter placeholder in the query. If a mapping is used,
    %(key)s must be used as the placeholder.

    Returns long integer rows affected, if any

    """

На мой взгляд, самый простой способ получить количество выделенных строк - это:

Объект cursor возвращает список с результатами при использовании команд fetchAll(), fetchone(), fetchmany (). Чтобы получить выбранные строки, просто выведите длину этого списка. Но это просто имеет смысл для fetchall (). ;- )

Пример:

print len(cursor.fetchall) 

Для mysql самый простой способ-это

mycur.execute("SELECT COUNT(*) FROM osreport")
print(mycur.fetchall())

/ / это работает для меня. U может использовать этот способ

query = "select count(id) from test"
cursor.execute(query)
var = cursor.fetchone ()
print var[0]

Comments

    Ничего не найдено.