我想弄清楚下面這行是否完全是 - 特別是%% s部分?關於帶參數的字符串的新手Python問題:「%% s」?
cursor.execute('INSERT INTO mastertickets (%s, %s) VALUES (%%s, %%s)'%sourcedest, (self.tkt.id, n))
關於字符串格式化和插入變量到Python的字符串的任何好的迷你教程?
我想弄清楚下面這行是否完全是 - 特別是%% s部分?關於帶參數的字符串的新手Python問題:「%% s」?
cursor.execute('INSERT INTO mastertickets (%s, %s) VALUES (%%s, %%s)'%sourcedest, (self.tkt.id, n))
關於字符串格式化和插入變量到Python的字符串的任何好的迷你教程?
的%%
成爲單一%
。這段代碼本質上是做兩個級別的字符串格式。首先%sourcedest
執行把你的代碼基本上分爲:
cursor.execute('INSERT INTO mastertickets (BLAH, FOO) VALUES (%s, %s)', (self.tkt.id, n))
然後DB層應用參數,那剩下的插槽。
需要double-%才能安全地獲取通過第一個字符串格式化操作傳遞的數據庫的插槽。
%%變成單個%
「但是應該怎麼做呢?」
艱難的召喚。問題在於他們正在將元數據(特別是列名稱)即時插入到SQL語句中。我不是這種事情的忠實粉絲。變量sourcedest
有兩個列名將被更新。
實際使用的列名稱對只有一對(或幾對)是很好的。我的首選是做到這一點。
if situation1:
stmt= "INSERT INTO mastertickets (this, that) VALUES (?, ?)"
elif situation2:
stmt= "INSERT INTO mastertickets (foo, bar) VALUES (?, ?)"
else:
raise Exception("Bad configuration -- with some explanation")
cursor.execute(stmt, (self.tkt.id, n))
當有對這種事情列一個以上的有效組合,則表明該數據模型融合了兩個實體到一個單一的表,這是一種常見的數據庫設計問題。由於您使用的是產品和插件,因此您可以對數據模型問題做很多事情。
只要不是用戶提供的,使用字符串格式插入列名就沒有那麼糟。該值應該是查詢參數,但:
stmt = "INSERT INTO mastertickets (%s, %s) VALUES (?, ?)" % srcdest
...
cursor.execute(stmt, (self.tkt.id, n))
它確實是相同的:
cursor.execute('INSERT INTO mastertickets (%s, %s) VALUES (:%s, :%s)' % \
tuple(sourcedest + sourcedest), dict(zip(sourcedest, (self.tkt.id, n))))
決不做。
這是一段很臭的代碼。你是在哪裏找到那個東西的。這是我想避免的。 – 2008-11-25 13:51:28
mastertickets trac的插件 – Epaga 2008-11-25 14:02:02