2009-07-24 8 views
0

私はここで間違っていますか?Pythonエラー:int引数が必要です

i = 0 
cursor.execute("insert into core_room (order) values (%i)", (int(i)) 

エラー:

int argument required 

データベースフィールドには、int型(11)ですが、私は%iはエラーを生成していると思います。

更新:

は、ここでより徹底した例です:

time = datetime.datetime.now() 
floor = 0 
i = 0 

は、try: booster_cursor.execute( 'core_roomに挿入(extern_id、名前、順序、UNIT_ID、作成、更新)値(%sは、%sは、%sは、%sは、%sは、%のS「)、(行[0]、[0]、I、床、時間、時間を行)) 例外、Eを除く: プリントe

エラー:

(1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order, unit_id, created, updated) values ('99', '99', '235', '12', '2009-07-24 1' at line 1") 

答えて

4

2つのもの。まず、を使用し、%iを使用しないでください。次に、パラメータはタプルでなければならないので、(i,)(カンマの後にはi)が必要です。また

ORDERはキーワードであり、そしてあなたは、フィールド名としてそれを使用している場合はエスケープする必要があります。

+0

%i引数は、dbのint型です。 %sを使用する必要がありますか? – slypete

+0

@slypete:はい、 '%s'を使用してください。 MySQLdbはデフォルトの 'paramstyle'として' format'を使います。詳細はPEP 249を参照してください:http://www.python.org/dev/peps/pep-0249/ – bernie

+1

%sを使用すると、MySQLサーバからSQLエラーが発生します。 – slypete

1

私は実行するための第二引数は()反復可能であることが予想されると信じています。

(int(i)) 

をする:

(int(i),) 

タプルにそれを作るために、このような場合、あなたは変更する必要があります。

+0

これは問題を解決するはずです。 –

1

おそらく?代わりの%iを使用する必要があります。そしてカッコがありません。

cursor.execute("insert into core_room (order) values (?)", (int(i),)) 
+1

@エヴァン:あなたは間違いなく正しいアイディアを持っていますが、この 'paramstyle'は' qmark'と呼ばれ、AFAIKはMySQLdbではサポートされていません。 – bernie

+0

ええ、私はちょうど私の悪をデモするためにそれを書いた。 – slypete