Doch eine so neue Version...AVFuchs hat geschrieben:Also hab gerade gefragt und der RDBMS der verwendet wird ist wohl PostSQL 3.8 oder 4 oder manchmal auch beide.
SQL-Abfrage mit Python starten
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
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.AVFuchs hat geschrieben:Also hab gerade gefragt und der RDBMS der verwendet wird ist wohl PostSQL 3.8 oder 4 oder manchmal auch beide.
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.Ich halte es ja für ein wenig gewagt jemanden ohne Datenbankerfahrung auf so eine Aufgabe loszulassen.
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?
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()
@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.
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.
@ 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. Schon mal danke für die Hilfe.
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. Schon mal danke für die Hilfe.
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???
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.
Grund: Link repariert.
@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.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
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.AVFuchs hat geschrieben:
Und mit diesem Treiber kann ich dann auch direkt SQL Befehle einbinden für die Abfrage einbinden???
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
assert encoding_kapiert
@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:
Dort gibt es auch eine Warnung die man im Zusammenhang mit SQL gar nicht oft genug sagen kann:
Sehr schön formuliert wie ich finde.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.
- Rebecca
- User
- Beiträge: 1662
- Registriert: Freitag 3. Februar 2006, 12:28
- Wohnort: DN, Heimat: HB
- Kontaktdaten:
http://xkcd.com/327/BlackJack hat geschrieben:Dort gibt es auch eine Warnung die man im Zusammenhang mit SQL gar nicht oft genug sagen kann:Sehr schön formuliert wie ich finde.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.
Offizielles Python-Tutorial (Deutsche Version)
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
- 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
Gruß Uwe
---------------------------------
have a lot of fun!
have a lot of fun!