2014-11-04 56 views
0

試圖選擇從數據庫的一些信息,我有一個數據庫管理器類,看起來像這樣:MYSQLdb/Python - 並非所有在字符串格式化錯誤期間轉換的參數?

class DatabaseManager: 
    def __init__(self): 
     self.connection = MySQLdb.connect(host="localhost", 
        user="neal", 
         passwd="hacker123", 
         db="massive") 

     self.cursor = self.connection.cursor() 

當試圖做一個選擇是這樣的:

db = DatabaseManager() 
    db.cursor.execute("SELECT password FROM USERS WHERE apikey = %s", str(request.apikey)) 

我得到一個

TypeError: not all arguments converted during string formatting 

這很奇怪,因爲我有類似的查詢在其他地方工作正常,像這樣:

db.cursor.execute('''INSERT into USERS(email, username, password, apikey) values (%s, %s, %s, %s)''', 
    (request.email, request.username, request.password, apikey)) 

我做錯了嗎?

編輯:列混亂,表看起來像這樣:

CREATE TABLE users (
id int NOT NULL AUTO_INCREMENT, 
email varchar(255) NOT NULL, 
username varchar(25) NOT NULL, 
password varchar(25) NOT NULL, 
apikey varchar(45) NOT NULL, 
PRIMARY KEY (id), 
UNIQUE(email), 
UNIQUE(username), 
UNIQUE(apikey) 
); 
+0

您是否嘗試將參數作爲單個字符串傳遞給tu9le? – 2014-11-04 19:20:35

回答

-1

你的東西好得多這樣的:

db.cursor.execute( 「選擇密碼來自用戶的WHERE apikey = {0}」 格式(STR鑑於request.apikey可以隱式轉換成字符串

+0

爲您的代碼使用代碼標籤。 :) – gsamaras 2014-11-04 19:25:10

+0

當我這樣做,我得到這個錯誤:'''文件「/Library/Python/2.7/site-packages/MySQLdb/connections.py」,第36行,在defaulterrorhandler OperationalError:(1054,「未知列'where子句'')中的'a443160d''''。 API密鑰格式爲'''a443160d-66fb-482c-953b-af1349b9c5ba''',該列名爲apikey。爲什麼它認爲我傳遞它的價值是列的名稱? – 2014-11-05 01:21:58

+0

如果apikey值是一個字符串,則包含引號(')。如果它是一個整數,它應該沒問題 – 2014-11-23 20:34:10

1

你應該給元組,不需要解析STR(request.apikey)))

;

db.cursor.execute("SELECT password FROM USERS WHERE apikey = %s", (request.apikey,)) 
相關問題