麻烦使用pyodbc查询中的日期

时间:2015-01-15 17:49:52

标签: python datetime odbc

我正在使用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

2 个答案:

答案 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