语法无效(近日期)

时间:2017-11-13 10:21:18

标签: python mysql datetime

我在stackoverflow中找到了这段代码。适合我的要求。我正在使用一个由id,日期,性别,姓名和姓氏组成的mysql数据库。我对代码进行了一些更改,以便我可以获取开始日期和结束日期之间的日期和其他信息。

import mysql
import mysql.connector
import command
import datetime

def findarbs(startdate, enddate):
      con = mysql.connector.connect(user='root', password='root', 
host='localhost',port='3306',database='testdb')
      cur = con.cursor()
      command = ("SELECT DISTINCT id, date FROM babyrop", WHERE 'date1' 
      > ('%s') AND 'date2' < ('%s'), ORDER BY date asc % (startdate, 
enddate))
print ('command')
cursor.execute(command)
result = cur.fetchone()
print (result)
while result is not None:
print (result[1])
result = cursor.fetchone()
cur = con.cursor()
cur.execute('select id, date weight from babyrop')

data = cursor.fetchall()
cur.close()
con.close()

当我尝试执行它时,我在日期附近收到错误“无效语法”。让我知道需要哪些更正。

1 个答案:

答案 0 :(得分:1)

  1. 您过早地终止了字符串。您在查询中也有无效的逗号。

    command = ("SELECT DISTINCT id, date FROM babyrop", WHERE 'date1' 
          > ('%s') AND 'date2' < ('%s'), ORDER BY date asc % (startdate, 
    enddate))
    

    &#34;应该&#34;是

        command = ("SELECT DISTINCT id, date FROM babyrop WHERE 'date1' 
      > ('%s') AND 'date2' < ('%s') ORDER BY date asc" % (startdate, 
    enddate))
    
  2. 我写了#34;应该&#34;因为你应该在查询中使用字符串连接,因为它会将你的代码暴露给SQL注入。您应该使用参数化查询。它还建议对查询字符串使用三引号,以便它们可以很好地分解:

        command = """SELECT DISTINCT id, date
                     FROM babyrop
                     WHERE 'date1' > ('%s') AND 'date2' < ('%s')
                     ORDER BY date asc"""
    
        cursor.execute(command, (startdate, enddate))
    

    另外,我非常确定您不需要'子句中列名和占位符周围的单引号(where),但可能是MySQL的事情。