2012-04-06 2 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

Не передавайте кортеж значений, передавайте их как отдельные аргументы.

От TRACEBACK:

query = query % db.literal(args) 

Обратите внимание, что в настоящее время интерполированное - args. В основном, просто удалите () вокруг вещей, которые вы проходили, чтобы они передавались вместо аргументов.

+0

Вы имеете в виду словарь? Извините, если я говорю как noob. –

+0

Нет, я имею в виду, вместо того, чтобы делать 'db.execute_lastrowid (" query ", (a, b, c))', do 'db.execute_lastrowid (" query ", a, b, c)'. – Amber

+0

Получил это. Это сработало. Благодарю. :) Я смутился, увидев «параметры», поскольку я думал, что это будет единственная переменная со всеми данными как кортежи. –

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

          ) 

Так, прежде чем вы только проходя один аргумент, кортеж, содержащий все ваши аргументы. В этом примере вы передаете 6 аргументов, что и ожидалось.

+0

Благодарю. Я получил его от его обновления и комментариев. :) –

Смежные вопросы