2010-10-18 41 views
1

簡短版本:當我嘗試通過ODBC使用Access的DatePart函數時,它無法解析。在Python中使用Microsoft Access SQL運算符ODBC

加長版:

我有一個Microsoft Access查詢與時間戳和得分返回行。我想按排序,然後按分數排序 - 這是當天有效的高分表。

對於想要更好的功能,我使用DatePart函數從時間戳中提取年份,月份和日期中的每一個,然後使用ORDER BY後跟Score。

在Microsoft Access中,查詢工作得很好。

但是,當我使用pyodbc訪問相同的查詢時,ODBC驅動程序被DatePart函數難住,並認爲它是缺少參數的名稱。

什麼使我驚訝的是,即使我躲在DatePart函數,通過創建一個新的高分查詢,然後SELECT * FROM HighScore,它仍然抱怨它無法找到參數。顯然,查詢的SQL在這個過程中相當晚的時候正在解決。

我的問題可以是:

  • 如何解決在SQL DatePart函數允許訪問運行它,或
  • 什麼是時間戳的日期部分進行排序正確的方式通過ODBC?

增加了額外的信息:

似乎有些大材小用,但這裏的一些代碼:

import pyodbc 
access_db_path = r"<ellided>" 
connection_string = 'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ='+access_db_path 
connection = pyodbc.connect(connection_string, autocommit = True) 

print "First query" 
connection.cursor().execute('SELECT ScoreTime FROM SplitExtendedP1') 
print "Worked" 

print "Second query" 
print connection.cursor().execute('SELECT DatePart("yyyy",ScoreTime) FROM SplitExtendedP1') 
print "Doesn't get here." 

下面是結果:

First query 
Worked 
Second query 
Traceback (most recent call last): 
    File "<ellided>.py", line 16, in <module> 
    print connection.cursor().execute('SELECT DatePart("yyyy", ScoreTime) FROM SplitExtendedP1') 
pyodbc.Error: ('07002', '[07002] [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1. (-3010) (SQLExecDirectW)') 
+1

您需要提供一些源代碼以及從pyodbc獲得的確切錯誤消息。 – 2010-10-18 06:51:06

回答

2

你確定使用引號"yyyy"而不是撇號'yyyy'是有效的在SQL的方言?

+0

謝謝。確切的問題。 – Oddthinking 2010-10-18 14:32:37

2

日期時間作爲浮點數存儲在訪問中。小數點左邊的數字是日期,小數點右邊的小數部分是時間(以一天中的一小部分表示;即.5 =正午)。

如果您想根據當天排序,則可以簡單地使用Int()函數返回datetime字段的整數部分。

+0

很高興知道。我可以回過頭來讓代碼更簡單。謝謝。 – Oddthinking 2010-10-18 14:33:07

+0

除了使它更簡單,它也應該使它更快。 – mwolfe02 2010-10-18 16:24:43

相關問題