2015-01-15 46 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