2017-08-01 25 views
0

psycopg2遊標將帶有轉義字符串的字符串表示text/char/varchar值。例如,利用該插入到表中的存儲過程:出現在Python中插入未轉義的字符串

cur.execute('SELECT insert_profile("name", "favorite color example")') 

我的問題,當我嘗試使用字符串插值來插入變量傳遞到執行函數的字符串。

我試過對字符串文字上的變量和單引號使用雙引號,但這只是執行常規操作。例如:

name = "Harry" 
color = "Blue" 
cur.execute('SELECT insert_profile({0}, {1})'.format(name, color) 

我也試着築巢的變量,但它插入文字嵌套串入數據庫:

name = "'Harry'" 
color = "'Blue'" 

什麼是正確的做法?對不起,如果答案是在SO或互聯網上的其他地方。我沒有成功環顧四周。

回答

0

從psycopg網頁:

cur.execute(
...  """INSERT INTO some_table (an_int, a_date, another_date, a_string) 
...   VALUES (%(int)s, %(date)s, %(date)s, %(str)s);""", 
...  {'int': 10, 'str': "O'Reilly", 'date': datetime.date(2005, 11, 18)}) 

查詢字符串有指鍵在字典中的佔位符,司機會插適當的價值觀報價,逃逸等,可以節省你不少很多麻煩。

更重要的是:你不應該通過字符串操作(如concat操作或format)來構建查詢。由於SQL注入,這留下了巨大的安全漏洞。讓司機努力工作!