2

このように、トルネードのデータベースラッパーでクエリを実行しようとしています-

p_id = db.execute_lastrowid("""INSERT INTO `gplaces`.`place` 
                                    (`gid`, `name`, `reference`, `lat`, `long`, `vicinity`) 
                                    VALUES (%s, %s, %s, %s, %s, %s)""", 
                                    (
                                        str(place['id']),
                                        str(place['name']),
                                        str(place['reference']),
                                        float(place['geometry']['location']['lat']),
                                        float(place['geometry']['location']['lng']),
                                        str(place['vicinity'])
                                    )
                                )

しかし、常にタイトルにエラーが発生します。これがトレースバックです-

Traceback (most recent call last):
  File "insertbs.py", line 38, in <module>
    str(place['vicinity'])
  File "/home/bibhas/Works/yodl/database.py", line 145, in execute_lastrowid
    self._execute(cursor, query, parameters)
  File "/home/bibhas/Works/yodl/database.py", line 207, in _execute
    return cursor.execute(query, parameters)
  File "/usr/lib/pymodules/python2.7/MySQLdb/cursors.py", line 159, in execute
    query = query % db.literal(args)
TypeError: not enough arguments for format string

私が間違っているのかわかりません。

4

2 に答える 2

6

値のタプルを渡すのではなく、個別の引数として渡します。

トレースバックから:

query = query % db.literal(args)

- で補間されていることに注意してくださいargs。基本的に、()渡していたものの周りを削除して、代わりに引数として渡されるようにします。

于 2012-04-06T16:20:55.043 に答える
3

Amberの功績を認めてください。例を投稿しているだけです:

 p_id = db.execute_lastrowid("""INSERT INTO `gplaces`.`place` 
                                (`gid`, `name`, `reference`, `lat`, `long`, `vicinity`) 
                                VALUES (%s, %s, %s, %s, %s, %s)""", 

                                 str(place['id']),
                                 str(place['name']),
                                 str(place['reference']),
                                 float(place['geometry']['location']['lat']),
                                 float(place['geometry']['location']['lng']),
                                 str(place['vicinity'])

                            )

したがって、引数を 1 つだけ渡す前は、すべての引数を含むタプルです。この例では、6 つの引数を渡していますが、これは想定どおりです。

于 2012-04-06T16:28:24.910 に答える