2
我想用我的python程序查詢MySQL表。但是,我想要查詢的表格是其名稱作爲變量(參數)傳入的表格。Python動態表名稱的MySQL參數查詢
我想是這樣的:
readTable_query = """SELECT * FROM %s"""
readTable_cursor.execute(readTable_query, (table_name))
這樣做的問題是動態生成的SQL查詢中引號把表名,即而不是產生像「SELECT * FROM產品」的查詢,它生成一個查詢,如「SELECT * FROM'products'」。這導致我的程序失敗並拋出錯誤。有沒有解決方法?
我知道我可以連接查詢,但這會導致SQL注入的安全風險。參考
全碼:
import MySQLdb
table_name = 'products'
db_connection = MySQLdb.connect(host,user,passwd,db)
readTable_cursor = db_connection.cursor()
readTable_query = """SELECT * FROM %s"""
readTable_cursor.execute(readTable_query, (table_name))
更多的代碼,請 – user1767754 2014-10-21 23:08:24
一般情況下,SQL參數通常不允許參數表(本以爲是允許通過用戶輸入_at all_指定表是非常危險的,驗證用戶輸入只是錯誤的安全性)。特別是,Python的SQL參數化由DB-API 2規範定義,該規範不允許使用表名。更特別的是,MySQLdb的確允許它,但它沒有記錄,不應該依賴。正確的答案通常是建立一個前端視圖,讓您選擇一個列值爲後端的表格,然後參數化_that_。 – abarnert 2014-10-21 23:35:25