Seite 1 von 1

Kann Access eine SQL-Abfrage mit Variablen verarbeiten?

Verfasst: Donnerstag 11. Oktober 2007, 09:33
von Aquerias
Hallo,

ich hätte da mal eine Frage.

Ich habe in Python eine Variable (z.B. A) in der ein Name steht (z.B. Kurt).
Diese Variable kann aber auch einen anderen Namen beinhalten. Das ist Benutzerabhängig.

Weiterhin habe ich eine Access Datenbank in der verschiedene Daten zu den Namen stehen.

Diese Daten möchte ich nun über Python mit einer SQL-Abfrage abfragen.
Das funktioniert mit dem folgenden SQL-Code auch sehr gut:

Code: Alles auswählen

SELECT PersDaten.PID, PersDaten.Index, PersDaten.Jahr 
FROM PersDaten
WHERE PersDaten.Index = 101 AND PersDaten.PID 
IN (SELECT MitNamen.ID FROM MitNamen WHERE MitNamen.Name = "Kurt");
Nun bekomme ich alle Daten aus der Datenbank des Mitarbeiters "Kurt" mit dem Index 101.

Frage:

Würde mir Access die Daten auch liefern wenn ich statt den Namen Kurt die oben angesprochene Variable A in die SQL-Abfrage einsetze?

Ich möchte damit vermeiden, dass ich in den SQL-Abfragen immer die Werte ändern muss. Es sollte möglich sein die Variable einmal festzulegen und damit verschiedene SQL-Abfragen zu starten.

Ich hoffe ich konnte mein Anliegen einigermaßen deutlich machen.

Gruß Aquerias

Verfasst: Donnerstag 11. Oktober 2007, 09:42
von lutz.horn
Das geht. Benutze einfach ein ODBC-Modul Deiner Wahl, z. B. http://pyodbc.sourceforge.net/, und setze die Parameter in der WHERE-Klausel mit der "?"-Syntax der Python Database API Specification v2.0.

Verfasst: Donnerstag 11. Oktober 2007, 09:54
von Aquerias
Hallo lutz.horn,

danke für die schnelle Antwort.

ich habe das ODBC-Modul schon installiert (pyodbc-2.0.38.win32-py2.4.exe). Ich hoffe das ist die richtige Version.

Wie würde die SQL-Abfrage denn aussehen? So?:


SQL Abfrage:

Code: Alles auswählen

SELECT PersDaten.PID, PersDaten.Index, PersDaten.Jahr
FROM PersDaten
WHERE PersDaten.Index = 101 AND PersDaten.PID
IN (SELECT MitNamen.ID FROM MitNamen WHERE MitNamen.Name = "A");
Vielleicht kannst Du mir ja ein kleines Beispiel geben oder den oberen SQL-Code abändern.

Vielen Dank nochmals.

Gruß Aquerias

Verfasst: Donnerstag 11. Oktober 2007, 10:01
von lutz.horn
Probier's mal so:

Code: Alles auswählen

sql = """SELECT PID, Index, Jahr
FROM PersDaten
WHERE Index = 101 AND PID
IN (SELECT ID FROM MitNamen WHERE Name = ?)"""

name = "A"
person = cursor.execute(sql, name).fetchone()
print person.PID, person.Index, person.Jahr

Verfasst: Montag 15. Oktober 2007, 14:53
von Aquerias
Hallo lutz.horn,

vielen Dank für die Hilfe.
Das einbauen der Variablen hat sehr gut geklappt.

Danke nochmals.

Aquerias