2015-12-14 175 views
1

我有以下PostgreSQL的查詢
Python從字典中刪除單引號

data = {'token':"123",'kart_user':"tablename"} 
select_stmt = "SELECT * FROM %(kart_user)s WHERE token = %(token)s" 
self.cur.execute(select_stmt, data) 
result = self.cur.fetchone() 

在SELECT查詢%(kart_user)s是代表單引號
的形式,我的問題是我怎樣才能從刪除引號相同的查詢??。

回答

3

使用SQL參數的整個是爲了防止數據被解釋爲SQL對象或語法。您不能使用SQL參數來命名錶;你只能使用數據的SQL參數。

您必須單獨插入表名稱。這確實意味着你冒着打開你的代碼到SQL注入的風險;如果源自用戶輸入,我會根據已知表名稱列表測試表名。

assert data['kart_user'] in known_tables 
select_stmt = "SELECT * FROM {} WHERE token = %(token)s".format(data['kart_user']) 
self.cur.execute(select_stmt, data) 
+0

工作感謝您提前): –