2017-08-09 56 views
1

我苦苦寻找此错误的解决方案,同时不断获得MySQL的1064传递两个日期时间参数的SQL查询在python

我的代码:

query = "SELECT iv_alert.sensorId, iv_alert.sensorAlertUUID, 
iv_packetlog.packetData FROM iv_alert LEFT JOIN iv_packetlog ON 
iv_alert.packetLogId = iv_packetlog.packetLogId WHERE 
iv_packetlog.creationTime > %s AND iv_packetlog.creationTime <= %s" 

args=lastquerytime, lasttime 
cursor.execute(query,args) 

产生以下错误:

_mysql_exceptions.ProgrammingError: (1064, 'You have an error in your 
SQL syntax ; check the manual that corresponds to your MySQL server version for 
the right syntax to use near \') AND iv_packetlog.creationTime <= 
("\'2017-08-09 14:53:21\'",)\' at line 1') 

与此同时,路过只有一个参数效果很好:

query = "SELECT iv_alert.sensorId, iv_alert.sensorAlertUUID, 
iv_packetlog.packetData FROM iv_alert LEFT JOIN iv_packetlog ON 
iv_alert.packetLogId = iv_packetlog.packetLogId WHERE 
iv_packetlog.creationTime > %s" 

args=lasttime 
cursor.execute(query,args) 

我在做什么错?请指教。

+0

不知道它是否在将__%s__替换为__?__问号 – Nabin

+0

后感谢您的回答。在getPCAP 光标 文件 “grabPCAPs.py”,管76,在 getPCAP() 文件 “grabPCAPs.py” 41行,:不幸的是,现在我得到这样的: 回溯(最近最后一次通话) .execute(query,args) 文件“C:\ Python27 \ lib \ site-packages \ MySQLdb \ cursors.py”,第159行,在 执行 query = query%db.literal(args) TypeError:not all在字符串格式化过程中转换的参数 –

+0

忘记我的评论。这只是一个猜测:p – Nabin

回答

0

尝试增加周围的查询支架,使ARGS一个元组:

query = ("SELECT iv_alert.sensorId, iv_alert.sensorAlertUUID," 
     "iv_packetlog.packetData FROM iv_alert LEFT JOIN iv_packetlog ON" 
     "iv_alert.packetLogId = iv_packetlog.packetLogId WHERE" 
     "iv_packetlog.creationTime > %s AND iv_packetlog.creationTime <= %s") 

args = (lastquerytime, lasttime) 
cursor.execute(query, args) 

你可以看到同样的example的文件中。

+0

谢谢你的回答。仍然有相同的错误(1064)。 –

+0

@NickBabkin是否尝试使用'BETWEEN%s AND%s'而不是'iv_packetlog.creationTime>%s和iv_packetlog.creationTime <=%s'?也许这会做诡计? – droravr

+0

不,我没有,因为我以前在GUI MySQL客户端运行这个查询,它运行良好,这意味着语法是正确的。 –

0

好吧,这里的解决方案:

相反的:

args=lastquerytime, lasttime 

通这样的:

args=(lastquerytime + lasttime) 

为了让一个统一的元组。