web-dev-qa-db-ja.com

Python MySQLdbの問題(TypeError:%d形式:strではなく、数値が必要です)

次の挿入操作を実行しようとしています:

cursor.execute("""
                    insert into tree (id,parent_id,level,description,code,start,end)
                    values (%d,%d,%d,%s,%s,%f,%f)
                    """, (1,1,1,'abc','def',1,1)
                    )

MYSQLテーブルの構造は次のとおりです。

id int(255),
parent_id int(255),
level int(11),
description varchar(255),
code varchar(255),
start decimal(25,4),
end decimal(25,4)

しかし、プログラムを実行するとエラーが発生します

"ファイル" /usr/lib/pymodules/python2.6/MySQLdb/cursors.py "、行151、クエリ実行= query%db.literal(args)

TypeError:%d format:strではなく、数字が必要です

59
user721975

形式文字列は実際には通常のPython形式文字列ではありません。常に%sすべてのフィールド。

refer 公式ドキュメント

Argsがリストまたはタプルの場合、%sはクエリでplaceholderとして使用できます。 argsが辞書の場合、%(name)sをクエリのプレースホルダーとして使用できます。

->つまり:ここ%sNOTフォーマッタですが、はプレースホルダです

143
Keith

これを試して :

cursor.execute("""
                    insert into tree (id,parent_id,level,description,code,start,end)
                    values (%s,%s,%s,'%s','%s',%s,%s)
                    """%(1,1,1,'abc','def',1,1)
                    )
0
orain

そのタイプのエラーを見たときはいつでも、値または変数のタイプをチェックするためにtype()関数を使用する必要があります。手段pythonは文字列のすべての値を取ります(デフォルトではデータ型は文字列です)。そのため、%dは数値用であり、文字列用ではないというエラーが表示されます。したがって、すべてのタイプのフィールドについて、pythonの%sを考慮してください。

0
jkmali

同じエラーが発生しましたが、それは別の理由によるものです。問題は、文字列に「%」が含まれていて、Pythonが混乱していることです。

TemplateStr = '[....] % discount rate  [....]  %s and %s
print TemplateStr % ('abc', 'def')

Pythonは "%discount"を "%d"と解釈し、数字ではなく文字列( 'abc')を供給していたため文句を言い続けました。

それを理解するのに長い時間がかかりました!

(解決策は、%ではなく%%と入力することです。)

0
Davide Andrea

彼のデータは整数または10進形式であるため、通常文字列形式に使用される%sをどのように使用できますか%dまたは%iは整数または10進値に使用する必要があります。

0
Roshan