アクセスデータベースからデータを選択するためにpypyodbcを使用しています。指定された 3 つのパラメーターを使用して、次のクエリを使用しています。
何種類か試しましたがダメでした。構文に問題はありません。
SELECT [Date], [Time], [uSec], [threeR], [twoCV]
FROM [table_a]
WHERE (Date = ? AND Time > ?)
OR (Date > ?)
パラメータには次のタイプがあります。
[datetime.date, datetime.time, datetime. date]
印刷すると、次のようになります。
1900-09-16 , 00:00:00, 1900-09-16
pypyodbc.DatabaseError: ('07002', '[07002] [Microsoft][ODBC Microsoft Access Driver] パラメーターが少なすぎます。4 が予想されます。')
#-- Begin Python code sample
#-- Checks the DB file and retrieves data
def pullData(self):
#-- Connect to Access
con = pypyodbc.connect('Driver={Microsoft Access Driver (*.mdb)};DBQ=F:/database.mdb')
cur = con.cursor()
#-- Get column list
columnListODBC = '[thisDate], [thisTime]'
for y in myTable.getColumns():
columnListODBC = columnListODBC + ', [' + y + "]"
#-- See footnote 1
print(columnListODBC)
#-- Get the most recent SQL entry
for row in curSQL.execute('SELECT MAX(Datetime) FROM [' + _.getName() + ']'):
xDateTime = datetime.datetime.strptime(row[0], "%Y-%d-%m %H:%M:%S")
day = xDateTime.date() # Get only the DATE of the most recent entry
time = xDateTime.time() # Get only the TIME of the most recent entry
#-- Pull all ODBC data
queryString = 'SELECT ' + columnListODBC + ' FROM [' + _.getName() + '] WHERE (thisDate = ? AND thisTime > ?) OR (thisDate > ?)'
#-- See footnote 2
print(queryString, ", ", day, ", ", time)
cur.execute(queryString, [day,time,day])
印刷 1 : [thisDate]、[thisTime]、[uSec]、[threeR]、[twoCV]
Print 2 : SELECT [thisDate], [thisTime], [uSec], [threeR], [twoCV] FROM [table_a] WHERE (thisDate = ? AND thisTime > ?) OR (thisDate > ?) , 1900-09-16 , 00:00:00
編集:いじりながら、列の1つを削除すると正常に実行されるようです。ソーステーブルには両方の列が存在しますが。これは、元のクエリが実行されない理由に関する質問には答えません。
SELECT [Date], [Time], [uSec], [twoCV]
FROM [table_a]
WHERE (Date = ? AND Time > ?)
OR (Date > ?)
編集 2 : 日付と時刻の列の名前を変更しても違いはありません。以下でもエラーが発生します。
SELECT [thisDate], [thisTime], [uSec], [threeR], [twoCV]
FROM [table_a]
WHERE ([thisDate] = ? AND [thisTime] > ?)
OR ([thisDate] > ?)
[Microsoft][ODBC Microsoft Access Driver] パラメータが少なすぎます。期待 5。