我正在寫一個小小的python腳本來幫助我自動創建我的個人項目的mysql數據庫和相關帳戶。該腳本的一部分是一個將數據庫名稱作爲字符串的函數,然後創建數據庫。是否有任何安全的方式來參數化MySQL查詢中的數據庫名稱?
def createDB(dbConn, dbName):
import MySQLdb
c = dbConn.cursor()
query = """CREATE DATABASE %s;""";
c.execute(query, (dbName,))
這不起作用,因爲MySQL's CREATE DATABASE詢問數據庫的未加引號的名稱,如
CREATE DATAbASE test_db
,但我的代碼,試圖安全地插入提供的數據庫名稱爲查詢的用戶創建:
CREATE DATABASE 'test_db'
然後你會得到「你的MySQL語法在測試附近有問題」。
即使這是個人使用,我真的不想直接插入用戶提供的字符串到任何類型的查詢。它反對我的宗教信仰。有沒有一種安全的方法可以將用戶提供的數據庫名稱插入python(或任何語言)的mySQL查詢中,以確保用戶輸入(例如test_db; DROP some_other_db;
)將被正確拒絕或轉義?
嘗試'conn.escape_string',根據第二個答案在這裏:http://stackoverflow.com/questions/3617052/escape-string-python-for-mysql –