无法使用 pyodbc 查询中的日期

Posted

技术标签:

【中文标题】无法使用 pyodbc 查询中的日期【英文标题】:Trouble using date from pyodbc query 【发布时间】:2015-01-15 17:49:52 【问题描述】:

我正在使用与 pyodbc 连接的 python 2.7 处理 Access 2003 数据库。视窗 7

我无法理解日期查询。

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

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

当我们收集并打印日期时

dob = res[2]

我们得到

打印出生日期>>>> 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

我的日期 = 日期(y, m, d)

允许一个成功的查询事务,

查询 "SELECT id, name FROM Siswa WHERE name ='%s' AND dob => %s" % (nama, mydate)

yields ('A0103', 'Susan', datetime.datetime(1986, 4, 10, 0, 0)

但也会交付任何其他年轻的苏珊

我希望查询

"SELECT id, name FROM Siswa WHERE name ='%s' AND dob = %s" % (nama, mydate)

to yield ('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

【问题讨论】:

【参考方案1】:

我遇到了同样的问题,无法查询日期。

我的解决方案原来是:

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

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

【讨论】:

【参考方案2】:

用途:

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

代替:

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

【讨论】:

以上是关于无法使用 pyodbc 查询中的日期的主要内容,如果未能解决你的问题,请参考以下文章

在 Access 中使用 pyodbc 处理日期,给出“参数太少”错误

PyODBC:即使存在也无法打开驱动程序

无法使用 pyodbc 库连接到 Azure 数据库

PyOdbc 无法连接到 sql server 实例

无法使用存储过程pyodbc SQL SERVER创建数据库

无法使用 pyodbc 在 Access 数据库的表中插入/更新长文本字段