web-dev-qa-db-ja.com

MySQLdb Python%dと%sを挿入

前駆体:

MySQL Table created via:
CREATE TABLE table(Id INT PRIMARY KEY NOT NULL, Param1 VARCHAR(50))

関数:

.execute("INSERT INTO table VALUES(%d,%s)", (int(id), string)

出力:

TypeError: %d format: a number is required, not a str

ここで何が起こっているのか、コマンドを実行できない理由がわかりません。これはPythonでMySQLdbを使用しています。 .executeはカーソルオブジェクトで実行されます。

編集:

質問: Python MySQLdbの問題(TypeError:%d形式:strではなく、数値が必要です) は、%sすべてのフィールド。これはなぜでしょうか?なぜこのコマンドが機能するのですか?

.execute("INSERT INTO table VALUES(%s,%s)", (int(id), string)
15
Matt Stokes

クエリの実行中はクエリ全体が文字列形式である必要があるため、%s 使用すべきです...

クエリが実行された後、整数値は保持されます。

だからあなたのラインはそうあるべきです。

.execute("INSERT INTO table VALUES(%s,%s)", (int(id), string))

説明は ここ です

23
noobmaster69

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

6
lwzhuo