Psycopg2

Psycopg2-Tutorial

Psycopg2-Tutorial

Python-, PostgreSQL- und Psycopg2-Tutorial

Um eine Anwendung über ein einfaches Skript hinaus zu entwickeln, ist es notwendig, Daten außerhalb des Speichers in einer Datenbank zu speichern.  Es gibt viele mögliche Auswahlmöglichkeiten für eine Datenbank, aber PostgreSQL ist eine robuste Open-Source-Plattform, die sich leicht auf die Produktion skalieren lässt.

Python und PostgreSQL können miteinander verbunden werden, um schnell leistungsstarke Anwendungen zu entwickeln.  Psycopg ist ein PostgreSQL-Adapter, der verwendet werden kann, um PostgreSQL über die Python-basierte Bibliothek zu nutzen.  Dieses Tutorial führt Sie durch die Installation von Psycopg2 und etwas Python-Code, um seine Verwendung zu demonstrieren.

Sie können Psycopg2 über den folgenden Terminal-Pip-Befehl installieren.

$ pip installiere psycopg2

Bei der Installation sollten Sie die Terminalausgabe unten sehen.

Sammeln von psycopg2
Herunterladen von psycopg2-2.7.3.2-cp27-cp27m-
macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10
_10_x86_64.whl (1.7MB)
100 % |████████████████████████████████|████████████████████████████████ 1.7MB 397kB/s
Gesammelte Pakete installieren: psycopg2
psycopg2-2 erfolgreich installiert.7.3.2
Bradleys-Mini:~ BradleyPatton$

Um das Psycopg2-Paket in Ihre Python-Anwendung zu importieren, verwenden Sie die folgende Codezeile.

psycopg2 importieren

Um einige Daten in unsere Datenbank zu laden, habe ich etwas Code aus einem früheren Tutorial zu Pandas ausgeliehen. Der folgende Code erstellt einen Pandas DataFrame mit historischen Daten.  Dies wird dann genutzt, um eine Tabelle in der PostgreSQL-Tabelle zu erstellen.

def get_data(Symbole, Startdatum, Enddatum):
Panel = Daten.DataReader(Symbole, 'yahoo', start_date, end_date)
df = panel['Schließen']
df.Spalten = map(str.niedriger, df.Säulen)
hd = Liste (df)
df . drucken.Kopf()
HD drucken
zurück df

Ich werde jetzt einen Housekeeping-Code einrichten, der zum Ausführen des Tutorials verwendet wird. Diese beiden Methoden werden verwendet, um die von uns erstellten Psycopg2-Methoden aufzurufen.

def tutorial_run():
Symbole = ['SPY', 'AAPL','GOOG']
df = get_data(Symbole, '2006-01-03', '2017-12-31')
if __name__ == "__main__":
tutorial_run()

Um eine Verbindung zur PostgreSQL-Datenbank herzustellen, müssen wir die folgende Methode hinzufügen. Try\Except bietet eine gewisse Fehlerbehandlung für den Fall, dass die lokale Datenbank nicht ausgeführt wird oder falsche Verbindungsparameter an die Datenbank übergeben werden. Die Methode connect in der Psycopg2-Bibliothek verbindet sich mit der Datenbank mit den Parametern, die in der Verbindungszeichenfolge übergeben werden. Ihre Parameter für dbname, user und password können sich unterscheiden. Wenn die Verbindung aus irgendeinem Grund fehlschlägt, wird die Fehlermeldung an die Konsole geschrieben. Diese Methode gibt das Verbindungsobjekt an unsere Aufrufmethode zurück, wo es für weitere Datenbankoperationen verwendet werden kann.

def connect():
Nachteile = "dbname='tutorial' user="postgres" host="localhost" password="password""
Versuchen:
conn = psycopg2.verbinden (Nachteile)
"Verbunden" drucken
außer:
print "Ich kann keine Verbindung zur Datenbank herstellen"
Rückverbindung

Sobald wir die Verbindung zur PostgreSQL-Datenbank hergestellt haben, können wir unsere Daten aus der Methode get_data() in unsere Datenbank laden. Psycopg2 und Pandas machen dies zu einem sehr einfachen Prozess.

Die erste Zeile definiert die Methode, die Pandas verwenden sollen, um sich mit der Datenbank zu verbinden, um den DataFrame zu kopieren. Sie werden die gleichen Parameter wie Ihre Verbindungsmethode angeben. Die zweite Codezeile speichert den DataFrame mit der Methode to_sql() in der PostgreSQL-Datenbank.

def create_table(Tabelle, df):
engine = create_engine('postgresql+psycopg2://postgres:[email protected]:5432/tutorial')
df.to_sql(Tabelle, Engine, if_exists='ersetzen')

Ein kurzer Blick in unser PostgreSQL pgAdmin-Terminal zeigt, dass der Code den DataFrame erfolgreich in die Tabelle „close“ geladen hat. Jetzt haben wir einige Daten in unsere Datenbank geladen. Wir können psycopg verwenden, um einige Abfragen der Daten auszuführen. Die folgende Methode ist so konstruiert, dass die in unserer ersten Methode hergestellte Verbindung verwendet und eine Abfrage in unserer PostgreSQL-Datenbank ausgeführt wird. Um die 4 SQL-Objekte zu erstellen, müssen wir eine weitere Importanweisung hinzufügen.

von psycopg2 import sql

Um dynamische SQL-Befehle zu erstellen, verwendet psycopg die Zeichenfolgenformatierung, um Variablen mit den Operatoren %s und in die Zeichenfolge einzufügen.

PostrgreSQL unterscheidet zwischen Groß- und Kleinschreibung. In der Methode get_data() haben wir unsere Spaltenüberschriften in Kleinbuchstaben gezwungen. Der Index war in dieser Anleitung nicht enthalten. Um den großen Spaltenkopf „Data“ in der Abfrage zu übergeben, müssen wir ihn in doppelten Anführungszeichen an PostgreSQL übergeben pass. Um dies in einem String in Python zu tun, müssen Sie das Escape-Zeichen „\“ vor den doppelten Anführungszeichen senden send.

Wir können das „%s“ in der Zeichenfolge mit der folgenden Python-Zeichenfolgenformatierungssyntax ersetzen. Dies ersetzt %s durch unseren Datumsparameter dt.

So führen Sie die erstellte SQL-Abfrage aus. Sie müssen es dann an den Cursor übergeben .execute()-Methode. Durch den Anruf .fetchall() Methode, geben Sie die Ergebnisse der Abfrage zurück. Beim Ausdrucken auf der Konsole können Sie die Ergebnisse anzeigen.

def get_row(dt, conn):
cr = conn.Mauszeiger()
Abfrage = sql.SQL("SELECT aapl from close WHERE "Datum" = '%s'" % dt)
cr.ausführen (abfrage)
Druck cr.holen ()

Um diese Funktion auszuführen, fügen wir die folgende Codezeile zur Methode tutorial_run() hinzu. Sie sollten ähnliche Ergebnisse wie unten erhalten.

get_row("2017-12-29",conn)

In der nächsten Methode verwenden wir die String-Format-Methoden, um mehrere Parameter an unsere Abfrage zu übergeben. Diese Abfrage benötigt ein Datum und drei Spalten. Zusätzlich zur Verwendung des %s-Operators verwenden wir den Operator , um String-Variablen zu einem String zu verbinden und sie in unseren Abfrage-String einzufügen. Unsere Abfragezeichenfolge verwendet jetzt den unten stehenden Join mit einem "", Trennzeichen, um mehrere Spaltennamen an unsere Abfrage zu übergeben.

def get_cols(dt, col1, col2, col3, conn):
cr = conn.Mauszeiger()
Abfrage = sql.SQL("SELECT from close WHERE "Datum" = '%s'" % dt).Format(
sql.SQL(', ').beitreten([sql.Bezeichner (col1), sql.Bezeichner(col2), sql.Kennung(col3)]))
cr.ausführen (abfrage)
Druck cr.holen ()

Um unsere neue Methode zu verwenden, füge ich die folgende Zeile zu unserer Methode tutorial_run() hinzu. Sie sollten die Ergebnisse unten sehen.

get_cols("2017-12-29","aapl","spy", "goog", conn)

Die nächste Methode, die wir schreiben, verwendet zwei -String-Ersetzungen, um alle Daten in unserer Tabelle mit Ausnahme unseres Index abzurufen. Diese Methode baut auf unserer vorherigen Methode auf, indem eine zweite Notation zum Ersetzen von Klammern "1" hinzugefügt wird. Diesmal sind die Klammern so nummeriert, dass sie im Bestellformat-Begriffscode ersetzt werden. Unsere neue Methode verbindet die drei Spaltenparameter mit Kommatrennzeichen. Außerdem ist der zweite Parameter in der format-Methode die Tabellenvariable. Die Abfragezeichenfolge wird dann erstellt, indem die Klammern durch die Parameter in der Formatmethode der Reihe nach ersetzt werden. Das sind 0 = Spalten und 1 = Tabellenname.

def get_tab(table, col1, col2, col3, conn):
cr = conn.Mauszeiger()
Abfrage = sql.SQL("SELECT 0 from 1 ").Format(
sql.SQL(', ').beitreten([sql.Bezeichner (col1), sql.Kennung(col2),
sql.Bezeichner(col3)]), sql.Kennung(Tabelle))
cr.ausführen (abfrage)
Druck cr.holen ()

Um unsere neue Methode zu verwenden, füge ich die folgende Zeile zu unserer Methode tutorial_run() hinzu. Sie sollten die Ergebnisse unten sehen.

get_tab("close", "aapl", "spy", "goog", conn)

Es gibt viele weitere Methoden in der psycopg-Bibliothek zu erkunden. Dies sollte Ihnen ein gutes Verständnis der psycopg-Funktionen vermitteln. Ich habe unten auf Dokumentationsseiten einige weitere Ressourcen bereitgestellt, die es Ihnen ermöglichen, die Bibliothek ausführlicher zu erkunden.

Vollständiger Code

psycopg2 importieren
von psycopg2 import sql
pandas_datareader als Daten importieren
def get_data(Symbole, Startdatum, Enddatum):
Panel = Daten.DataReader(Symbole, 'yahoo', start_date, end_date)
df = panel['Schließen']
df.Spalten = map(str.niedriger, df.Säulen)
hd = Liste (df)
df . drucken.Kopf()
HD drucken
zurück df
def connect():
Nachteile = "dbname='tutorial' user="postgres" host="localhost" password="password""
Versuchen:
conn = psycopg2.verbinden (Nachteile)
"Verbunden" drucken
außer:
print "Ich kann keine Verbindung zur Datenbank herstellen"
Rückverbindung
def create_table(Tabelle, df):
engine = create_engine('postgresql+psycopg2://postgres:[email protected]:5432/tutorial')
df.to_sql(Tabelle, Engine, if_exists="replace")
def get_row(dt, conn):
cr = conn.Mauszeiger()
Abfrage = sql.SQL("SELECT aapl from close WHERE "Datum" = '%s'" % dt)
cr.ausführen (abfrage)
Druck cr.holen ()
def get_cols(dt, col1, col2, col3, conn):
cr = conn.Mauszeiger()
Abfrage = sql.SQL("SELECT from close WHERE "Datum" = '%s'" % dt).Format(
sql.SQL(', ').beitreten([sql.Kennung(col1),
sql.Bezeichner(col2), sql.Kennung(col3)]))
cr.ausführen (abfrage)
Druck cr.holen ()
def get_tab(table,col1, col2, col3, conn):
cr = conn.Mauszeiger()
Abfrage = sql.SQL("SELECT 0 from 1 ").Format(
sql.SQL(', ').beitreten([sql.Bezeichner (col1), sql.Kennung(col2),
sql.Bezeichner(col3)]), sql.Kennung(Tabelle))
cr.ausführen (abfrage)
Druck cr.holen ()
def tutorial_run():
conn = verbinden()
Symbole = ['SPY', 'AAPL','GOOG']
df = get_data(Symbole, '2006-01-03', '2017-12-31')
create_table("close", df)
get_row("2017-12-29",conn)
get_cols("2017-12-29","aapl","spy", "goog", conn)
get_tab("close", "aapl", "spy", "goog", conn)
if __name__ == "__main__":
tutorial_run()

Verweise

initd.org/psycopg
initd.org/psycopg/docs/install.html
http://initd.org/psycopg/docs/sql.html
Wiki.postgresql.org/wiki/Psycopg2_Tutorial

So installieren und spielen Sie Doom unter Linux
Einführung in Doom Die Doom-Serie entstand in den 90er Jahren nach der Veröffentlichung des ursprünglichen Doom. Es war sofort ein Hit und seitdem hat...
Vulkan für Linux-Benutzer
Mit jeder neuen Grafikkartengeneration stoßen Spieleentwickler an die Grenzen der grafischen Wiedergabetreue und kommen dem Fotorealismus einen Schrit...
OpenTTD vs. Simutrans
Das Erstellen einer eigenen Transportsimulation kann Spaß machen, entspannend und äußerst verlockend sein. Deshalb sollten Sie so viele Spiele wie mög...