Как может я получать доступ к количеству строк, затронутых:
cursor.execute("SELECT COUNT(*) from result where server_state='2' AND name LIKE '"+digest+"_"+charset+"_%'")
Попробуйте использовать 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 / базы данных (например, 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:
Объекты курсора должны отвечать на следующие методы и атрибуты :
[…]
.rowcount
Этот доступный только для чтения атрибут определяет количество строк, которые остаются последними. execute * () произведено (для операторов DQL, таких как 'select') или затронуто (для операторов DML, таких как 'update' или 'insert').
Но будьте осторожны - далее говорится:
Атрибут равен -1, если для курсора не было выполнено
.execute * ()
или количество строк последней операции не может определяться интерфейсом. [7]Примечание:
В будущих версиях спецификации DB API последний случай может быть переопределен, чтобы объект возвращалNone
вместо -1.
Итак, если вы выполнили свой оператор и , он работает, и вы уверены, что ваш код всегда будет запускаться с одной и той же версией одной и той же СУБД, это разумное решение.
Количество произведенные строки возвращаются из выполнения:
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
"""