何が問題なのかわかりません。手伝ってくれますか?
cur = conn.cursor()
sql = "select count(*) from sbox_trig where date > CURDATE() and name ='bw109nocd%2Ezip'"
cur.execute(sql)
Exception Type: TypeError
Exception Value: not enough arguments for format string
何が問題なのかわかりません。手伝ってくれますか?
cur = conn.cursor()
sql = "select count(*) from sbox_trig where date > CURDATE() and name ='bw109nocd%2Ezip'"
cur.execute(sql)
Exception Type: TypeError
Exception Value: not enough arguments for format string
%
パーセント記号を2倍にします。
sql = "select count(*) from sbox_trig where date > CURDATE() and name ='bw109nocd%%2Ezip'"
それ以外の場合、この部分は浮動小数点数の文字列フォーマッタ%2E
として解釈されます。
MySQLdbモジュールに実際にバグを見つけた可能性があります。文字列リテラルのパーセント記号を認識しているのではないかと思います。%を削除して(そして他に何も変更せずに)同じクエリを試して、これが当てはまるかどうかを確認します。そうである場合は、モジュールのバグデータベースにメッセージを投稿する必要があります。
また、それが問題の原因である場合、短期的な修正は2つの%記号(つまり、bw109nocd %% 2Ezip)を使用して、文字列インタープリターがそれをリテラルのパーセント記号として認識できるようにすることです。
また、ここで有用な情報が必要な場合は、Python、MySQL、およびMySQLdbのバージョンを含める必要があります。使用しているオペレーティングシステムも含めると役立つ場合がありますが、ここではおそらく最も重要なことではありません。データベースの問題については、少なくともテーブルスキーマを確認することも役立ちます。
私は自分のデータベースの1つでコードのバリエーションをテストしましたが、エラーはありませんでした。私はUbuntu12.04を実行しており、Python 2.7.3と、MySQLとMySQLdbのストックバージョンが何であれ。
私はPython用のMySQLを使用していませんが、推測する必要がある場合は、%2Eをprintfスタイルのフォーマット引数(このページを参照)として解釈し、パラメーターを期待しています。おそらく次のようなことを試してみてください。
cur = conn.cursor()
sql = "select count(*) from sbox_trig where date > CURDATE() and name = %s"
cur.execute(sql, ("bw109nocd%2Ezip",))
クエリでデータを直接指定するのではなく、最初にデータをローカル変数に格納してから、クエリで変数を渡す方が適切です。
cur = conn.cursor()
temp = "bw109nocd%2Ezip"
sql = "select count(*)from sbox_trig where date> CURDATE()and name ='%s'"%temp
cur.execute(sql)