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