2010-09-13 126 views
0

我試圖使用Python 2.5字符串格式化,但是我已經在下面的例子中碰到的問題:在指數不支持的格式字符「」」(0×27):Python 2.5字符串格式化問題!

values = { 
      'url': 'http://blabla.com', 
      'link' : 'http://blabla.com', 
      'username' : 'user', 
      'spot' : 0, 
      'views' : 10, 
      'date' : 3232312, 
      'private' : 1, 

      } 

query = """insert into hyves.Image (URL, StaticLink , HostUsername, SpotCount, ViewCount, UploadDate) values ('%(url)','%(link)','%(username)',%(spot),%(views),%(date), %(private))""" % values 

print query 

它給了我下面的錯誤:ValueError異常106. 任何人都可以幫助我嗎?

+0

的[SQLITE3文檔(http://docs.python.org/library/sqlite3.html)給出瞭如何爲SQL做參數替換的例子查詢。 – 2010-09-13 13:47:50

回答

9

不要使用字符串格式來編寫這樣的SQL查詢!使用你的數據庫模塊進行插值 - 它會通過正確的轉義來做到這一點,這樣就不會發生在你身上:http://xkcd.com/327/

如果你想用sql格式化不同的東西,使用%(foo)s(或d,或任何您需要的格式)。

+0

+1提及格式化SQL查詢這樣的危險 – 2010-09-13 13:17:48

+0

+1引用xkcd – 2010-09-13 13:26:15

+0

那麼我這樣做的原因是SQL文件輸出到文件,並將由我手動執行。所以我不在乎消毒輸入。 – Nasir 2010-09-13 13:53:26

3

你缺少格式字符,即:

"INSERT INTO ... %(url)s, ..." % values 

...如果你想以URL格式的字符串。

3

你需要指定explicit conversion標誌:

query = """insert into hyves.Image (URL, StaticLink , HostUsername, SpotCount, ViewCount, UploadDate) values (%(url)s,%(link)s,%(username)s,%(spot)i,%(views)i,%(date)i, %(private)i)""" % values