簡體   English   中英

將兩個datetime參數傳遞給python中的SQL查詢

[英]Passing two datetime parameters to SQL query in python

我一直在努力獲取針對此錯誤的解決方案,同時不斷獲取MySQL 1064。

我的代碼:

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)

我究竟做錯了什么? 請指教。

嘗試在查詢周圍添加方括號並使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)

您可以在文檔中看到相同的示例

好的,這是解決方案:

代替:

args=lastquerytime, lasttime

通過此:

args=(lastquerytime + lasttime)

使它成為一個統一的元組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM