2016-06-22 15 views
1

Grundsätzlich versuche ich Column1_mbgl Felddaten in Tabelle1 zu aktualisieren, die alle in MS Access-Datenbank basieren. Das Skript wird ohne Fehler ausgeführt, aber wenn die Tabelle überprüft wird, ist keine Aktualisierung aufgetreten. Ich habe zwei Möglichkeiten ausprobiert, wie im Code gezeigt, ohne Erfolg. Die zweite Option ist der SQL-Code, der direkt aus der MS Access-Abfrage generiert wird. Kann jemand vorschlagen, was ich im Code vermisse?Pyodbc aktualisiert MS Access-Tabelle nicht

#import pypyodbc 
import pyodbc 

# MS ACCESS DB CONNECTION 
pyodbc.lowercase = False 
conn = pyodbc.connect(
    r"Driver={Microsoft Access Driver (*.mdb, *.accdb)};" + 
    r"Dbq=C:\temp\DB_access.accdb;") 

# OPEN CURSOR AND EXECUTE SQL 
cur = conn.cursor() 

# Option 1 - no error and no update 
cur.execute("UPDATE Table1 SET Column1_mbGL = Column2_mbGL-0.3 WHERE ((Column3_name='PZ01') AND (DateTime Between #6/14/2016 14:0:0# AND #6/16/2016 12:0:0#) AND (TYPE='LOG'))"); 

# Option 2 - no error and no update 
#cur.execute("UPDATE Table1 SET Table1.Column1_mbGL = [Table1]![Column2_mbGL]-0.3 WHERE (((Table1.Column3_name)='PZ01') AND ((Table1.DateTime) Between #6/14/2016 14:0:0# And #6/16/2016 12:0:0#) AND ((Table1.TYPE)='LOG'))"); 

cur.close() 
conn.close() 
+0

Haben Sie überprüft, ob Datensätze in db die Wo-Bedingung erfüllen? Außerdem sollte überprüft werden, ob die Abfrage außerhalb von Python wie erwartet aktualisiert wird. – notionquest

+0

ja die gleiche Abfrage lief innerhalb von MS Access mit erfolgreichen Updates, also gibt es Daten für diese Bedingung. – Curtis

+2

Sie haben 'conn.commit()' vergessen, nachdem Sie Ihre UPDATE-Abfrage ausgeführt haben. –

Antwort

3

Sie haben vergessen zu conn.commit() nach dem UPDATE-Abfrage ausgeführt wird. Die Python database API gibt an, dass Verbindungen standardmäßig mit "autocommit" deaktiviert werden, sodass eine explizite commit benötigt wird.

Verwandte Themen