影響を受ける行数にアクセスするにはどうすればよいですか:
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(*)
の値である1つの要素を持つタプルを保持します。したがって、行数を見つけるには:
_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 から、これは通常PythonデータベースAPIによって実装されます:
カーソルオブジェクトは、次のメソッドと属性に応答する必要があります。
[…]
しかし、注意してください-それは言い続ける:
属性は、カーソルで
.execute*()
が実行されていない場合、または最後の操作の行カウントがインターフェイスで判断できない場合、-1です。 [7]注:
DB API仕様の将来のバージョンでは、オブジェクトが-1ではなくNone
を返すように、後者の場合を再定義できます。
したがって、ステートメントを実行した場合、andそれが機能し、andコードに対して常に実行されることを確信しています同じDBMSの同じバージョン、これは合理的なソリューションです。
影響を受ける行の数は、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
"""
私の意見では、選択した行の量を取得する最も簡単な方法は次のとおりです。
カーソルオブジェクトは、フェッチコマンド(fetchall()、fetchone()、fetchmany())を使用すると、結果のリストを返します。選択した行を取得するには、このリストの長さを印刷します。しかし、fetchall()には意味があります。 ;-)
例:
print len(cursor.fetchall)