python和mysql.connector要求引用无符号int

python和mysql.connector要求引用无符号int,python,mysql,prepared-statement,Python,Mysql,Prepared Statement,我使用的是mysql连接器1.0.9。和Python 3.2 由于语法错误mysql,此查询失败。connector抛出ProgrammingError,具体的mysql错误只是%IPs和DATE_SUBNOW右侧有语法错误,间隔1小时

我使用的是mysql连接器1.0.9。和Python 3.2

由于语法错误mysql,此查询失败。connector抛出ProgrammingError,具体的mysql错误只是%IPs和DATE_SUBNOW右侧有语法错误,间隔1小时<已访问:

SELECT COUNT(*) FROM bad_ip_logins WHERE IP = %(IP)s AND DATE_SUB(NOW(), INTERVAL 1 HOUR) < accessed

不要使用字符串插值。将SQL参数留给数据库适配器:

cursor.execute('''\
    SELECT COUNT(*) FROM bad_ip_logins WHERE IP = %s AND DATE_SUB(NOW(), INTERVAL 1 HOUR) < accessed''', (ip,))

在这里,我们将参数ip作为元组中的一个单独参数传递给execute调用,使其成为一个序列,数据库适配器将负责正确的引用,填充%s占位符。

使用此语句的Python代码是什么?异常的完整回溯是什么?语法错误是什么?是否确实使用了带占位符的预处理语句?因为这与如果您错误地使用Python的%运算符而不是让MySQL填充占位符时会发生的情况完全相同。这就是为什么我们需要查看Python代码。
IP = 1249764151  # IP converted to an int
conn = mysql.connector.connect(db_params)
curs = conn.cursor()
query = "SELECT COUNT(*) FROM bad_ip_logins WHERE IP = %(IP)s AND DATE_SUB(NOW(), INTERVAL 1 HOUR) < accessed"
params = {'IP', IP}
curs.execute(query, params)
+----------+------------------+------+-----+---------+-------+
| Field    | Type             | Null | Key | Default | Extra |
+----------+------------------+------+-----+---------+-------+
| IP       | int(10) unsigned | YES  |     | NULL    |       |
| user_id  | int(11)          | YES  |     | NULL    |       |
| accessed | datetime         | YES  |     | NULL    |       |
+----------+------------------+------+-----+---------+-------+
cursor.execute('''\
    SELECT COUNT(*) FROM bad_ip_logins WHERE IP = %s AND DATE_SUB(NOW(), INTERVAL 1 HOUR) < accessed''', (ip,))