2017-01-27 65 views
0

我現在正在學習使用MySQL與python。如何在創建新數據庫時傳遞參數以執行()

當我試圖創建一個新的數據庫是這樣的:

sql = 'CREATE DATABASE IF NOT EXISTS %s' 
cursor.execute(sql, (self.DB_NAME,)) 

DB_NAME是一個字符串,在這種情況下

self.DB_NAME = 'bmagym' 

我得到這個錯誤:

MySQL Error [1064]: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''bmagym'' at line 1 

但是如果我用下面的代碼代替:

sql = 'CREATE DATABASE IF NOT EXISTS %s' %self.DB_NAME 
cursor.execute(sql) 

它按預期工作。

我的問題是我如何傳遞參數execute()而不是使用%?在SQL語法

+0

爲什麼你想用另一種方式傳遞它? – ItsOdi1

回答

0

數據庫名寫的

`dbname` 

SQL可以接受純dbname爲好。

CREATE DATABASE IF NOT EXISTS dbname 
# works like 
CREATE DATABASE IF NOT EXISTS `dbname` 
# BUT: only if dbname is not a SQL keyword. 

cursor.execute()函數將自動格式化和轉義字符串(防止SQL注入)。所以這個查詢被執行:

CREATE DATABASE IF NOT EXISTS 'dbname' 

這是一個語法錯誤。 Here is a similar topic on this question.你的第二種方法很好,只需用python %運算符替換數據庫名稱即可。

sql = 'CREATE DATABASE IF NOT EXISTS `%s`' %self.DB_NAME 
+0

明白了,謝謝你的回答 – meteorshard

相關問題