python和mysql.connector要求引用无符号int
我使用的是mysql连接器1.0.9。和Python 3.2 由于语法错误mysql,此查询失败。connector抛出ProgrammingError,具体的mysql错误只是%IPs和DATE_SUBNOW右侧有语法错误,间隔1小时<已访问: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小时
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,))