0

私は私のpythonコードから以下の結果を持っています:

[

 {filename:'1,2',Name:'Gorge',registration number: '6657', registration date: '2012-09-10 14:31:13'}, 
 {filename:'5,43',Name:'mazu',registration number:'45', registration date:'2012-10-08 17:28:47'}]

それをMySQLテーブルに入れたいと思ったらすぐに、次のエラーが発生しました。

Traceback (most recent call last):
  File "C:\Users\jio\Datasets 1\MyTable_info.py", line 63, in <module>
    cur.executemany(query,records)
  File "C:\Python27\lib\site-packages\MySQLdb\cursors.py", line 243, in executemany
    self.errorhandler(self, ProgrammingError, msg.args[0])
  File "C:\Python27\lib\site-packages\MySQLdb\connections.py", line 36, in defaulterrorhandler
    raise errorclass, errorvalue
_mysql_exceptions.ProgrammingError: not enough arguments for format string

MySQL テーブルに結果を挿入するための私の python コードは、次のコードです。

con = MySQLdb.connect(host = "******", port=***, user = "***", passwd="*****", db="****")
with con:
    cur=con.cursor()
    cur.execute('''CREATE TABLE IF NOT EXISTS info(id INT(10) auto_increment primary key,file_name VARCHAR(10), 
Name VARCHAR(50),Registration ID INT(50),registration time INT(50))''')


    query= "INSERT INTO info (file_name, Name, Registration ID, registration time) VALUES ( %s, %s, %s, %s )"
    cur.executemany(query,records)

    con.commit()

このエラーが発生する理由と、エラーの意味を知っている人はいますか?

4

3 に答える 3

1

フィールド INT(50) に文字列を挿入しようとしています。

テーブルの最後のフィールドである登録時間フィールドを見てください。これは整数で、「2012-10-08 17:28:47」や「2012-09-10 14:31:13」などの値を挿入しようとしています。

簡単な修正として、登録時間フィールド タイプを VARCHAR(50) に変更します。

しかし、おそらく、パフォーマンスの問題のために、この種の目的のために VARCHAR の代わりにある種の TIMESTAMP フィールドを使用することを考える必要があります。


ある種の文字列を追加したいフィールドにはINT型を使用しないでください。

からレコード変数を変更します

[ {filename:'1,2',Name:'Gorge',登録番号:'6657',登録日:'2012-09-10 14:31:13'}, {filename:'5,43',Name :'mazu',登録番号:'45',登録日:'2012-10-08 17:28:47'}]

to [('1,2','Gorge','6657', '2012-09-10 14:31:13'),('5,43','mazu','45','2012-10 -08 17:28:47')]

また、列名にも空白を使用しないでください

于 2013-04-25T09:54:20.067 に答える