2015-01-15 91 views
0

我正在使用python 2.7连接pyodbc来访问Access 2003数据库。 Windows 7从pyodbc查询中使用日期的问题

我无法理解日期查询。

在下面这个简单的例子中,第一个查询收集用户的出生日期'dob',它在数据库中是一个datetime.datetime对象。

打印行>>>>( 'A0103', '苏珊',datetime.datetime(1986,4,10,0,0))

当我们收集到的日期&打印它

DOB = RES [2]

我们得到

打印DOB >>>> 1986年4月10日00:00:00

打印类型(DOB)>>>类型 'datetime.datetime'

但是当在第二个查询中使用。

“SELECT名字来自DOB =%s的用户” %DOB “

我们得到:

ProgrammingError:( '42000'。”[42000] [微软] [ODBC Microsoft Access驱动程序]语法查询表达式'dob = 1986-04-10 00:00:00'(-3100)(SQLExecDirectW)“)

提取日期&使用datetime.date重新创建日期时间对象:

y,m,d = dob.year,dob.month,dob.day

数值指明MyDate =日期(Y,M,d)

允许sucsesfull查询事务,

查询“SELECT ID,名称FROM Siswa WHERE NAME = '%s' 和DOB =>%的”%(NAMA,数值指明MyDate)

产率( 'A0103', '苏珊',datetime.datetime(1986,4,10,0,0)

而且将提供任何其他苏珊那名年轻

我希望查询

“SELECT ID,名字从Siswa其中name = '%s' 和出生日期=%s的” %(NAMA,指明MyDate)

,而产生( 'A0103', '苏珊' ,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

我运行相同的问题,无法查询日期。

我的解决方案竟然是:

SELECT name FROM users WHERE DateValue(registered) <= '20-04-2015' 

所以DateValue()似乎是比较日期的解决方案。

0

用途:代替

sql = "SELECT name FROM users WHERE dob = '%s'" % dob 

sql = "SELECT name FROM users WHERE dob = %s" % dob