SQL-Abfrage mit Python starten

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

AVFuchs hat geschrieben:Also hab gerade gefragt und der RDBMS der verwendet wird ist wohl PostSQL 3.8 oder 4 oder manchmal auch beide.
Doch eine so neue Version... :twisted:
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
AVFuchs
User
Beiträge: 18
Registriert: Freitag 1. Oktober 2010, 14:01

Das klingt "fast" schon ironisch...
Wieso was ist denn mit der Version, kenn mich damit nicht weiter aus.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

AVFuchs hat geschrieben:Also hab gerade gefragt und der RDBMS der verwendet wird ist wohl PostSQL 3.8 oder 4 oder manchmal auch beide.
Das ist nun alles andere als präzise. Mit "Post SQL" könnte eine namentlich nicht näher spezifizierte Datenbank gemeint sein, die eben nicht unbedingt SQL spricht und anders organisiert ist. Andererseits könnte auch "PostgreSQL" gemeint sein. Dazu würde aber nun wiederum die Versionsangabe nicht passen, da PostgreSQL unter diesem Namen zum ersten Mal in Version 6.0 veröffentlicht wurde.

Ich halte es ja für ein wenig gewagt jemanden ohne Datenbankerfahrung auf so eine Aufgabe loszulassen.
AVFuchs
User
Beiträge: 18
Registriert: Freitag 1. Oktober 2010, 14:01

Ich halte es ja für ein wenig gewagt jemanden ohne Datenbankerfahrung auf so eine Aufgabe loszulassen.
Tja was soll ich dazu sagen. Es ist meine Aufgabe und die will ich so schnell und so gut wie möglich erledigen. Meine Theorie bestand ja auch darin, ich weiß wie man Dateien öffnet also öffne ich nur die Datei mit den SQL Befehlen, lasse die SQL die Daten von der Datenbank auslesen und speichere die Daten dann wieder mit Python. Ich dachte dazu reicht einfach der Verzeichnis und den Namen der Datenbank zu wissen und die Bibliothek mit der ich SQL in Python einbinde. Aber irgendwie beschleicht mich langsam das Gefühl das es so einfach nicht wird.

Und mit dem RDBMS kann ich nur sagen, was mein Chef mir gesagt hat vielleicht meinte er auch PostgreSQL und es ging nur sprachlich unter.

Edit:
Kann es sein das es so eine Version unter Linux gibt?
AVFuchs
User
Beiträge: 18
Registriert: Freitag 1. Oktober 2010, 14:01

Code: Alles auswählen

con = pymssql.connect(host=''hostname,user='name',password='kennwort',database='dbname')
cur = con.cursor()
query="select id,datum from tabelle where datum>=\'" + von + "\' and ts_insert<=\'" + bis + "\'"
cur.execute(query)
for row in cur.fetchall():
  id = row[0]
  datum = row[1]
  print Id + " vom " + str(datum.day) + "." + str(datum.month) + "." + str(datum.year) + " um " + str(datum.hour) + ":" + str(datum.minute) + ":" + str(datum.second)
con.commit()
con.close()
Diesen Code habe ich hier auf dieser Seite gefunden. So einfach hatte ich mir das zumindestens theoretisch vorgestellt. Oder bringt mir so was gar nix?
BlackJack

@AVFuchs: RDBMS haben in der Regel kein Verzeichnis oder einen Dateinamen als Schnittstelle nach aussen, sondern laufen als Server-Prozess.

SQL-Datenbanken haben zwar SQL als Gemeinsamkeit, die Art des Zugriffs auf den Server ist aber immer leicht unterschiedlich. Man braucht einen Treiber bzw. eine passende Python-Schnittstelle um über SQL mit der DB zu kommunizieren. Deswegen sind die Kenntnis von der konkreten Serversoftware und den Zugangsdaten dazu, wichtig um darauf zugreifen zu können.

Du müsstest also herausfinden welche Serversoftware tatsächlich läuft, also ob die Vermutung PostgreSQL zutrifft und welche Version es ist. Und dann brauchst Du ein Python-Modul das sich mit der konkreten DB verbinden kann. Auf Python-Seite gibt's für die gängigen SQL-Datenbaken Module, welche die Python DB-API 2.0 implementieren. Die allgemeine Doku dazu sollte man zumindest mal überflogen haben. Die gibt's irgendwo auf der Python-Webseite bei den PEPs (Python Enhancement Proposals).

So ähnlich wie der Code-Schnippsel wird's bei Dir dann später wohl auch aussehen. Hoffentlich nicht genau so, denn das zusammensetzen von Zeichenketten mittels ``+`` und einfügen von Werten mittels `str()`-Umwandlung sieht mehr nach BASIC als nach Python aus. Und insbesondere bei SQL sollte man Werte nicht selbst in die Abfragezeichenkette hineinformatieren, sondern dass dem Datenbankmodul überlassen.

Wenn Du die Verbindung zur DB hinbekommen hast, müsstest Du wissen wie die Daten in der DB organisiert sind, also wie die Tabellenstruktur aussieht, und welche Daten Du da heraushaben möchtest. Mit den Informationen kannst Du dann anfangen SQL-Anfragen zu schreiben.
AVFuchs
User
Beiträge: 18
Registriert: Freitag 1. Oktober 2010, 14:01

@ BlackJack: Erstmal danke für die ausführliche Antwort. Damit kann ich mir das jetzt erstmal alles richtig gut vorstellen und weiß wo ich anpacken muss.

Ich werde nochmal nachhaken bezüglich der fehlenden Infos und wenn ich diese habe werde ich mich nochmal melden bzw. probier schon mal was hinzubekommen. Vielleicht war auch PostgreSQL 8.3 gemeint und es war nur ein Zahlendreher drin. Ich werde es herausfinden. :mrgreen: Schon mal danke für die Hilfe.
AVFuchs
User
Beiträge: 18
Registriert: Freitag 1. Oktober 2010, 14:01

Hallo da bin ich wieder. :)

Also ich habe jetzt alle notwendigen Zugangsdaten und die RDBMS Version die auf dem Server läuft ist: PostgreSQL 8.3.

Ich habe mich auf der Python Seite nun auch schon ein bisschen weiter umgkuckt: Python.org
Da sind so viele Möglichkeiten um mit PostgreSQL zu arbeiten über Python aber welchen Treiber soll/muss ich den nun wählen???
Zuletzt geändert von Anonymous am Freitag 8. Oktober 2010, 10:13, insgesamt 1-mal geändert.
Grund: Link repariert.
BlackJack

@AVFuchs: Einen der auf Deiner Zielplattform und mit Deiner Python-Version funktioniert. Ich habe psycopg2 schonmal verwendet. An dem wird auch anscheinend aktiv entwickelt. Falls das auf einem Linux läuft, würde ich die Wahl auch davon abhängig machen, welche Module über die Paketverwaltung installierbar sind.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

AVFuchs hat geschrieben:Da sind so viele Möglichkeiten um mit PostgreSQL zu arbeiten über Python aber welchen Treiber soll/muss ich den nun wählen???
Meine Empfehlung: Psycopg2
AVFuchs
User
Beiträge: 18
Registriert: Freitag 1. Oktober 2010, 14:01

Ok. Dann probiere ich mal psycopg2.

Dann werde ich einfach mal damit versuchen rumzubasteln und was hinzukriegen.
Und mit diesem Treiber kann ich dann auch direkt SQL Befehle einbinden für die Abfrage einbinden???
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

AVFuchs hat geschrieben:
Und mit diesem Treiber kann ich dann auch direkt SQL Befehle einbinden für die Abfrage einbinden???
Es wurden dazu doch schon genügend Quellen genannt. Neben dem PEP wäre auch der Abschnitt in der Python-Doku zu SQLite aufschlussreich gewesen. Zudem hätte Dir ein schneller Blick in die Doku verraten, dass das natürlich geht.

Solltest Du Python3 verwenden, kann ich auch noch http://python.projects.postgresql.org/ empfehlen.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
BlackJack

@AVFuchs: Das Modul implementiert die Python DB-API 2.0 und ja mit der kann man SQL-Anfragen an die Datenbank absetzen. Für das Modul gibt's aber auch eine IMHO ganz gute Dokumentation. Gleich das erste Kapitel -- Basic Module Usage -- zeigt ein recht umfangreiches Beispiel der Grundfunktionalität.

Dort gibt es auch eine Warnung die man im Zusammenhang mit SQL gar nicht oft genug sagen kann:
http://initd.org/psycopg/docs/usage.html#the-problem-with-the-query-parameters hat geschrieben: Warning Never, never, NEVER use Python string concatenation (+) or string parameters interpolation (%) to pass variables to a SQL query string. Not even at gunpoint.
Sehr schön formuliert wie ich finde. :-)
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

BlackJack hat geschrieben:Dort gibt es auch eine Warnung die man im Zusammenhang mit SQL gar nicht oft genug sagen kann:
http://initd.org/psycopg/docs/usage.html#the-problem-with-the-query-parameters hat geschrieben: Warning Never, never, NEVER use Python string concatenation (+) or string parameters interpolation (%) to pass variables to a SQL query string. Not even at gunpoint.
Sehr schön formuliert wie ich finde. :-)
http://xkcd.com/327/ :D
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Benutzeravatar
Käptn Haddock
User
Beiträge: 169
Registriert: Freitag 24. März 2006, 14:27

Ich würde mich dann erst mal mit den Grundlagen zu Postgresql und psycopgsql2 befassen, hier gibt es dazu einige sehr gute und anschauliche Beispiele. Danach kannst du dich um Dinge wie SQLAlchemy kümmern, falls das notwendig ist.

Gruß Uwe
---------------------------------
have a lot of fun!
Antworten