2012-04-06 67 views
2

参数不够,我试图与Tornado's database wrapper执行查询,这样的 -类型错误:对格式字符串

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

不要传递值的元组,将它们作为单独的参数传递。

从回溯:

query = query % db.literal(args) 

注意什么在被插入 - args。基本上,只需删除围绕您传递的内容的(),以便它们可以作为参数传递。

+0

你的意思是像字典?对不起,如果我听起来像一个菜鸟。 – 2012-04-06 16:25:17

+0

不,我的意思是不用'db.execute_lastrowid(“query”,(a,b,c))','db.execute_lastrowid(“query”,a,b,c)''。 – Amber 2012-04-06 16:27:17

+0

明白了。这工作。谢谢。 :)我看到'参数',因为我认为它将是一个单一变量,所有数据都是元组,所以感到困惑。 – 2012-04-06 16:28:31

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

谢谢。我从他的更新和评论中得到了它。 :) – 2012-04-06 16:29:10