无法使用 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 处理日期,给出“参数太少”错误