2014-11-04 48 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,)) 
相关问题