-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