Version abrégée: lorsque j'essaie d'utiliser la fonction DatePart d'Access via ODBC, elle ne peut pas être résolue.Utilisation d'opérateurs SQL Microsoft Access en Python ODBC
version plus longue:
J'ai une requête Microsoft Access qui renvoie des lignes avec un horodatage et un score. Je veux le trier par jour et ensuite par le score - effectivement un tableau des meilleurs scores pour la journée.
Faute d'une meilleure fonction, j'ai utilisé la fonction DatePart
pour extraire chacun de l'année, du mois et du jour de l'horodatage, et ORDER BY
suivi du score.
Dans Microsoft Access, la requête fonctionne à merveille.
Toutefois, lorsque j'utilise pyodbc
pour accéder à la même requête, le pilote ODBC est tronqué par la fonction DatePart et pense qu'il s'agit du nom d'un paramètre manquant.
Ce qui m'a étonné est que même si je cachais la fonction DatePart, en créant une nouvelle requête de HighScore, puis SELECT * FROM HighScore
, il encore qu'il se plaint n'a pas pu trouver le paramètre. Apparemment, le SQL de la requête est en train d'être résolu assez tard dans le processus.
Ma question est:
- Comment puis-je résoudre la fonction DatePart dans le SQL pour permettre l'accès à l'exécuter, ou
- Quelle est une bonne façon de trier par la partie de jour d'un horodatage sur ODBC?
Ajouté Informations complémentaires:
On dirait surpuissant, mais voici un code:
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."
Voici les résultats:
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)')
Vous devrez fournir du code source et les messages d'erreur exacts que vous avez reçus de pyodbc. –