2016-11-07 2 views
1

Ich spiele mit Win32com.client für Python um zu versuchen, eine Zeile in eine MS Access-Tabelle schreiben/einfügen. Ich habe ein Beispiel gefunden, wie man eine Access-Tabelle here verbindet und abfragt. Grundsätzlich ihr Code leicht für meinen eigenen Gebrauch modifiziert ist:Schreiben Sie in MS Access-Tabelle, Python win32com

import win32com.client 

connection = win32com.client.Dispatch(r'ADODB.Connection') 
DSN = 'PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=c:\\testdb.mdb;' 
connection.Open(DSN) 
recordset = win32com.client.Dispatch(r'ADODB.Recordset') 
recordset.Open('SELECT * FROM Table1', connection, 1, 3) 
fields_dict = {} 
for x in range(recordset.Fields.Count): 
    fields_dict[x] = recordset.Fields.Item(x).Name 
    print fields_dict[x], recordset.Fields.Item(x).Value 

Also das mir sagt, wie eine select-Anweisung auf der Access-Tabelle auszuführen. Ich möchte in der Lage sein, Zeilen und Daten in die Tabelle zu schreiben. Wenn ich win32com für MS Office Produkte benutze, tendiere ich dazu, in die MSDN pages einzutauchen und zu versuchen, den VBA-Code für Python-Code zu interpretieren, aber dieser hat mich ein bisschen gefesselt. Das Paar, das ohne Beispiele im Internet nach langen Suchen gefunden hat, hat mich zum zweiten Mal raten lassen, ob das möglich ist oder nicht? hoffentlich hat jemand da draußen schon mal damit gespielt und hat einen Vorschlag.

+1

Wenn Sie eine 'SELECT' Anweisung mit ausführen win32com dann können Sie eine' INSERT' Anweisung auszuführen, obwohl für ein 'ADODB.Command' Objekt der Parameter spezifiziert wird etwas weitschweifig . Ein üblicherer Ansatz besteht darin, pyodbc (oder vielleicht pypyodbc) mit dem Access ODBC-Treiber für solche einfachen CRUD-Operationen zu verwenden und win32com zu speichern, um Manipulationen der Datenbank unter Verwendung von Access DAO durchzuführen, z. B. um strukturelle Änderungen an Access DDL vorzunehmen Kann nicht bewältigen. –

+0

Danke Gord. Ich würde gerne bei win32com bleiben, wenn ich kann. Ich habe Pyodbc auf meinen Reisen durch meine Suchen angeschaut. Dorthin werde ich als nächstes gehen, wenn das nicht klappt. – Mike

+1

Um Huckepack @ GordThompson's Kommentar, MS Access ist sowohl eine Back-End-Datenbank und eine GUI. Exe-Anwendung. Wenn Sie beabsichtigen, SQL-Anweisungen wie das Einfügen von Zeilen auszuführen, betrachten Sie db-API-Verbindungen (z. B. odbc) wie bei anderen RDMS: SQLite, SQL Server, MySQL usw. Wenn Sie Formulare/Berichte/Makros/Module anpassen müssen, führen Sie App-Methoden aus wie 'DoCmd. *' oder andere Anwendungsebenen verwenden dann die COM-Schnittstelle. Denken Sie daran, VBA ist eine externe Komponente zu Access.exe und COM-verbindet wie Sie mit Python sind! – Parfait

Antwort

2

Wie ich in meinem Kommentar auf die Frage erwähnt, Pyodbc (oder pypyodbc) und der Access ODBC-Treiber ist ein üblicher Weg, CRUD-Operationen zu tun, aber wenn man wirklich win32com und OLEDB verwenden möchten, könnten Sie ein UPDATE wie folgt tun:

import win32com.client 

# ADODB constants 
adVarWChar = 202 
adInteger = 3 
adParamInput = 1 

connection = win32com.client.Dispatch(r'ADODB.Connection') 
DSN = (
    r'PROVIDER=Microsoft.Jet.OLEDB.4.0;' 
    r'DATA SOURCE=C:\Users\Public\mdbTest.mdb;' 
    ) 
connection.Open(DSN) 
cmd = win32com.client.Dispatch(r'ADODB.Command') 
cmd.ActiveConnection = connection 
cmd.CommandText = "UPDATE Donors SET LastName = ? WHERE ID = ?" 
cmd.Parameters.Append(cmd.CreateParameter("?", adVarWChar, adParamInput, 255)) 
cmd.Parameters.Append(cmd.CreateParameter("?", adInteger, adParamInput)) 
cmd.Parameters(0).Value = "Thompson" 
cmd.Parameters(1).Value = 10 
cmd.Execute() 
connection.Close() 
+0

Danke Gord. Ich habe ein paar Modifikationen für meinen eigenen Gebrauch gemacht und habe dein Skript für mich arbeiten lassen. Ich schaue auch etwas näher auf pyodbc. Du warst eine gute Hilfe. Prost. – Mike

Verwandte Themen