-1
我正在使用mysql连接器1.0.9。和Python 3.2python和mysql.connector需要引用unsigned int
此查询由于语法错误而失败(mysql.connector引发ProgrammingError,具体的MySQL错误只是“%(IP)s AND DATE_SUB(NOW() ,间隔1小时)<访问“:
SELECT COUNT(*) FROM bad_ip_logins WHERE IP = %(IP)s AND DATE_SUB(NOW(), INTERVAL 1 HOUR) < accessed
但是,如果我引用变量IP,它的工作原理:
SELECT COUNT(*) FROM bad_ip_logins WHERE IP = '%(IP)s' AND DATE_SUB(NOW(), INTERVAL 1 HOUR) < accessed
在背景:
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)
我的理解是,您从不必为引用准备好的语句引用变量(对于我的代码中的其他查询,即使是访问此表上的IP变量的情况,也是如此)。为什么我需要在这个单例中引用它,而在其他地方呢?
如果这不是在做一个准备好的声明,我也有兴趣听到。我无法用这个注入任何东西 - 是否只是为了防止这种情况引用它?
如果它的事项,这是该表说明:
+----------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------------+------+-----+---------+-------+
| IP | int(10) unsigned | YES | | NULL | |
| user_id | int(11) | YES | | NULL | |
| accessed | datetime | YES | | NULL | |
+----------+------------------+------+-----+---------+-------+
你使用这个语句的Python *代码是什么?异常的完整回溯是什么? –
什么是语法错误? – jpmc26
您确定您实际上在占位符处使用准备好的语句吗?因为这看起来与如果错误地使用Python的'%'操作符时会发生什么,而不是让MySQL填充占位符。 (这就是为什么我们需要查看Python代码。) – abarnert