我正在使用python 2.7与pyodbc连接的Access 2003数据库。 Windows 7
我无法理解日期查询。
在下面的简单示例中,第一个查询收集用户的出生日期'dob',该日期在数据库中是datetime.datetime对象。
print row>>>> ('A0103','Susan',datetime.datetime(1986,4,10,0,0))
当我们收集日期&打印它
dob = res [2]
我们得到了
print dob>>>> 1986-04-10 00:00:00
打印类型(dob)>>>输入'datetime.datetime'
但是在第二个查询中使用时。
“SELECT name FROM users WHERE dob =%s”%dob“
我们得到:
ProgrammingError:('42000',“[42000] [Microsoft] [ODBC Microsoft Access Driver]查询表达式'dob = 1986-04-10 00:00:00'中的语法错误(缺少运算符)。( - 3100 )(SQLExecDirectW)“)
仅提取日期&使用datetime.date重新创建日期时间对象:
y,m,d = dob.year,dob.month,dob.day
mydate = date(y,m,d)
允许成功的查询事务,
查询“SELECT id,name FROM Siswa WHERE name ='%s'AND dob =>%s”%(nama,mydate)
收益率('A0103','苏珊',datetime.datetime(1986,4,10,0,0)
但也会提供更年轻的其他苏珊
我希望查询
“SELECT id,name FROM Siswa WHERE name ='%s'AND dob =%s”%(nama,mydate)
收益率('A0103','Susan',datetime.datetime(1986,4,10,0,0)
但是它空了。
我错过了什么?
from datetime import datetime, date
sql = "SELECT name, dob FROM users"
result1 = cur.execute(sql).fetchall()
for row in result1:
print row
name, dob = row[1], row[2]
print dob
try:
sql = "SELECT name FROM users WHERE dob = %s" % dob
result2 = cur.execute(sql).fetchall()
print result
except:
y, m, d = dob.year, dob.month, dob.day
mydate = date(y, m, d)
sql = "SELECT name FROM users WHERE dob => %s" % dob
result2 = cur.execute(sql).fetchall()
print result
sql = "SELECT name FROM users WHERE dob = %s" % dob
result2 = cur.execute(sql).fetchall()
print result
答案 0 :(得分:0)
我遇到了同样的问题,无法查询日期。
我的解决方案原来是:
SELECT name FROM users WHERE DateValue(registered) <= '20-04-2015'
所以DateValue()
似乎是比较日期的解决方案。
答案 1 :(得分:0)
使用:
sql = "SELECT name FROM users WHERE dob = '%s'" % dob
而不是:
sql = "SELECT name FROM users WHERE dob = %s" % dob