2012-04-06 13 views
2

私はこのように、Tornado's database wrapperでクエリを実行しようとしている -はTypeError:フォーマット文字列のための十分な引数

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 

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

答えて

6

タプルの値を渡さず、別々の引数として渡します。 - argsで補間されているもの

query = query % db.literal(args) 

注:トレースバックから

。基本的には、渡していたものの周りの()を削除して、代わりにargsとして渡すようにしてください。

+0

あなたは辞書のような意味ですか?申し訳ありませんが、私は騒ぎのように鳴っています。 –

+0

いいえ、db.execute_lastrowid( "query"、(a、b、c)) 'を実行する代わりに、' db.execute_lastrowid( "query"、a、b、c) 'を実行します。 – Amber

+0

ありがとうございます。それはうまくいった。ありがとう。 :)タプルとしてすべてのデータを持つ単一の変数になると思ったので、私は 'parameters'を見て混乱しました。 –

3

私はただの例を掲載しています、アンバー信用を与える:

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']) 

          ) 

だから、あなたは一つだけの引数を渡した前に、すべての引数を含むタプル。この例では、6つの引数を渡しています。これは期待しているものです。

+0

ありがとう。私は彼の更新とコメントからそれを得た。 :) –

関連する問題