2013-02-11 32 views
0

我正在寫python網站,我需要使用PostgreSQL作爲我的數據庫。 我想創造一個準備語句更新表,我試圖創建set爲:Python字典:創建一個準備好的語句

a=dict(b=3, c='d', x=10) 
keys=a.keys() 
print ",".join([keys[i] + "=$" + str(i + 1) for i in range(0, len(keys))]) 

從這裏輸出來作爲

x=$1,c=$2,b=$3 

可以用來生成一份聲明更新。

我想知道:

  • 是否有這更好的選擇嗎?
  • 這是一個代價高昂的操作(應該將len(鍵)放入一個變量中,還是作爲一個O(1)操作)
  • 循環內部是否有多個循環? a.keys()是否返回密鑰的深層副本,還是隻是一個參考?

回答

2

你做得很好;我使用相同代碼的稍微更具可讀性的版本:

a=dict(b=3, c='d', x=10) 
print ",".join(['{0}=${1}'.format(k, i) for i, k in enumerate(sorted(a))]) 

我按鍵排序(字典沒有固定的順序)。

Python PostgreSQL數據庫適配器遵循DBAPI v2.0規範,該規範支持使用SQL參數併爲數據庫提供了爲您準備語句的機會。但是,這些使用不同的語法,通常是規範中指定的一個或兩個變體。

+1

爲什麼[]裏面的.join()?你不能離開它並使用發電機形式嗎? – jterrace 2013-02-11 18:57:14

+1

@jterrace:你可以,但是'.join()'在傳遞一個生成器時很慢。使用列表理解反而更快。 – 2013-02-11 18:57:51

+1

有趣,不知道 – jterrace 2013-02-11 18:58:06