Kann Access eine SQL-Abfrage mit Variablen verarbeiten?

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Aquerias
User
Beiträge: 28
Registriert: Freitag 28. September 2007, 10:33

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
Benutzeravatar
lutz.horn
User
Beiträge: 205
Registriert: Dienstag 8. November 2005, 12:57
Wohnort: Pforzheim

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.
https://www.xing.com/go/invite/18513630.6a91d4
Aquerias
User
Beiträge: 28
Registriert: Freitag 28. September 2007, 10:33

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
Benutzeravatar
lutz.horn
User
Beiträge: 205
Registriert: Dienstag 8. November 2005, 12:57
Wohnort: Pforzheim

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
https://www.xing.com/go/invite/18513630.6a91d4
Aquerias
User
Beiträge: 28
Registriert: Freitag 28. September 2007, 10:33

Hallo lutz.horn,

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

Danke nochmals.

Aquerias
Antworten