Python: количество строк, на которые влияет cursor.execute("SELECT...)

Как получить доступ к количеству строк, на которые влияет:

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

Ответ 1

Попробуйте использовать 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()

PS. Также полезно использовать параметризованные аргументы, когда это возможно, потому что он может автоматически указывать аргументы для вас, когда это необходимо, и защищать от 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()

Ответ 2

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

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

[...]

.rowcount
           Этот атрибут только для чтения указывает количество строк, созданных последним .execute *() (для операторов DQL, таких как "select" ) или затронутых (для операторов DML, таких как "update" или "insert" ).

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

Ответ 3

Число выполняемых строк возвращается из выполнения:

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

    """

Ответ 4

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

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

Пример:

print len(cursor.fetchall) 

Ответ 5

для mysql простейшим способом является

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

Ответ 6

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

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