本文介紹了使用Pythondbapi轉義MySQL保留字的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我正在為MySQL中的保留字問題尋找一個很好的”蟒蛇”和”無SQL注入”的解決方案。
我有以下代碼:
alter_sql = 'ALTER TABLE %s ADD COLUMN %s TEXT'
cursor.execute(alter_sql, sql_params)
當列名類似于‘index’、‘int’、‘Limit’時就會出現此問題…
在MySQL外殼中,我可以執行以下操作:
ALTER TABLE test ADD COLUMN test.limit;
或
ALTER TABLE test ADD COLUMN `limit`;
但不是
ALTER TABLE test ADD COLUMN 'test.limit';
如何使用Python和MySQLdb實現這一點?
推薦答案
也許這會起作用:
alter_sql = 'ALTER TABLE `%s` ADD COLUMN `%s` TEXT'
UPDATE:這似乎不起作用,因為這種方式的綁定參數將添加單引號,因為MySQLdb假定這是一個字符串文字。
或者,您可以在列名之前追加表名?
table_name = MySQLdb.escape_string(table_name)
escaped_column_name = MySQLdb.escape_string(column_name)
column_name = '`%s`.`%s`' % (table_name, escaped_column_name)
alter_sql = 'ALTER TABLE %s ADD COLUMN %s TEXT' % (table_name, column_name)
這樣,您必須手動轉義它們,以避免綁定它們并在其兩邊添加單引號。
這篇關于使用Pythondbapi轉義MySQL保留字的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,