我在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()
当我尝试执行它时,我在日期附近收到错误“无效语法”。让我知道需要哪些更正。
答案 0 :(得分: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))
我写了#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的事情。