70

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

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行目、execute query = query%db.literal(args)

TypeError:%d形式:strではなく数値が必要です "

4

6 に答える 6

170

フォーマット文字列は、実際には通常のPythonフォーマット文字列ではありません。%s常にすべてのフィールドに使用する必要があります。

公式文書を参照してください:

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

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

于 2011-04-26T02:03:56.660 に答える
1

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

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

Pythonは、「%割引」を「%d」と解釈し、数値ではなく文字列('abc')をフィードしていたため、文句を言い続けました。

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

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

于 2019-03-13T00:14:11.270 に答える
0

これを試して :

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)
                    )
于 2013-08-12T14:19:52.963 に答える
0

この回答に基づくhttps://stackoverflow.com/a/46517683/1564659

やっと%sフロートや数字にも使っています。テーブルに挿入され、SQLがテーブルのデータ型を検出すると、すぐに変換されます

于 2021-11-09T13:18:09.887 に答える
-1

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

于 2017-01-21T10:36:47.510 に答える
-1

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

于 2018-10-03T18:38:41.967 に答える