Ich verwende pyodbc, über Microsoft Jet, um auf die Daten in einer Microsoft Access 2003-Datenbank von einem Python-Programm zuzugreifen.PyODBC und Microsoft Access: Inkonsistente Ergebnisse von einfachen Abfrage
Die Microsoft Access-Datenbank stammt von einem Drittanbieter; Ich lese nur die Daten.
Ich habe im Allgemeinen Erfolg bei der Extraktion der Daten, die ich brauche, aber ich habe kürzlich einige Diskrepanzen festgestellt.
Ich habe es gekocht auf eine einfache Abfrage nach unten, von der Form:
SELECT field1 FROM table WHERE field1 = 601 AND field2 = 9067
Ich habe die Feldnamen und Werte verschleiert aber wirklich, ist es nicht viel mehr trivial als das! Wenn ich die Abfrage in Access ausführe, gibt es einen Datensatz zurück.
Dann laufe ich es über Pyodbc, mit Code, der wie folgt aussieht:
connection = pyodbc.connect(connectionString)
rows = connection.execute(queryString).fetchall()
(Wieder ist es nicht viel mehr trivial als das bekommt!)
Der Wert von querystring wird geschnitten -und-eingefügt von der Arbeitsabfrage in Access, aber es gibt keine Datensätze zurück. Ich habe erwartet, dass es den gleichen Rekord zurückgibt.
Wenn ich die Abfrage ändern, um nach einem anderen Wert für Feld2, Bingo zu suchen, funktioniert es. Es sind nur einige Werte, die es ablehnt.
Also, bitte helfen Sie mir aus. Wo soll ich als nächstes diese Diskrepanz erklären? Wenn ich den Ergebnissen trivialer Anfragen nicht trauen kann, habe ich bei diesem Projekt keine Chance!
Update: Es wird noch einfacher! Die folgende Abfrage gibt verschiedene Zahlen ...
SELECT COUNT (*) FROM Tabelle
ich darüber nachzudenken, ob es zu irgendeiner Form von Caching und/oder unsachgemäßen Transaktionsmanagement von einer anderen Anwendung verwendet ist, die gelegentlich die Daten auffüllt .
Sollten Sie ein Cursor-Objekt zum Ausführen der Abfragezeichenfolge dort haben? Fetchall würde dann am Cursor aufgerufen, um Zeilen zu erzeugen. Siehe http://code.google.com/p/pyodbc/wiki/Rows – barrowc
@barrowc, Interessant. Ich habe das Fehlen eines cursor() -Aufrufs nicht bemerkt. Ich bin mir sicher, dass ich das irgendwo von einem Beispiel kopiert habe. Ich habe versucht, es wieder in [rows = connection.cursor(). Execute (queryString) .fetchall()] hinzuzufügen, aber es machte keinen Unterschied - anscheinend pyodbc ist verzeihender als die Python-DB-API-Spezifikation. – Oddthinking