psycopg2

Psycopg2-zelfstudie

Psycopg2-zelfstudie

Python-, PostgreSQL- en Psycopg2-zelfstudie

Om een ​​toepassing te ontwikkelen die verder gaat dan een eenvoudig script, is het noodzakelijk om gegevens buiten het geheugen in een database te bewaren.  Er zijn veel mogelijke keuzes voor een database, maar PostgreSQL is een robuust open source-platform dat gemakkelijk kan worden geschaald naar productie.

Python en PostgreSQL kunnen worden gekoppeld om snel krachtige applicaties te ontwikkelen.  Psycopg is een PostgreSQL-adapter die kan worden gebruikt om PostgreSQL te benutten via de op Python gebaseerde bibliotheek.  Deze tutorial doorloopt de installatie van Psycopg2 en wat Python-code om het gebruik ervan te demonstreren.

U kunt Psycopg2 installeren via de onderstaande terminal pip-opdracht:.

$ pip installeer psycopg2

Tijdens de installatie zou u de onderstaande terminal-uitgang moeten zien:.

psycopg2 verzamelen
psycopg2-2 downloaden.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.7 MB)
100% |████████████████████████████████| 1.7 MB 397 kB/s
Verzamelde pakketten installeren: psycopg2
psycopg2-2 . succesvol geïnstalleerd.7.3.2
Bradleys-Mini:~ BradleyPatton$

Om het Psycopg2-pakket in uw Python-toepassing te importeren, gebruikt u de onderstaande coderegel:.

psycopg2 importeren

Om wat gegevens in onze database te laden, heb ik wat code geleend van een eerdere tutorial over panda's. De onderstaande code maakt een panda's DataFrame met historische gegevens.  Dit zal dan worden gebruikt om een ​​tabel te maken in de PostgreSQL-tabel.

def get_data (symbolen, startdatum, einddatum):
paneel = gegevens.DataReader (symbolen, 'yahoo', startdatum, einddatum)
df = paneel['Sluiten']
df.kolommen = kaart(str.lager, df.kolommen)
hd = lijst (df)
print df.hoofd()
print hd
retour df

Ik zal nu een huishoudcode instellen die wordt gebruikt om de tutorial uit te voeren. Deze twee methoden zullen worden gebruikt om de Psycopg2-methoden aan te roepen die we maken.

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

Om verbinding te maken met de PostgreSQL-database, moeten we de onderstaande methode toevoegen:. De Try\Except biedt enige foutafhandeling in het geval dat de lokale database niet actief is of als er onjuiste verbindingsparameters aan de database worden doorgegeven. De verbindingsmethode in de Psycopg2-bibliotheek maakt verbinding met de database met de parameters die in de verbindingsreeks zijn doorgegeven. Uw parameters voor dbname, gebruiker en wachtwoord kunnen verschillen. Als de verbinding om de een of andere reden mislukt, wordt het foutbericht naar de console geschreven. Deze methode retourneert het verbindingsobject terug naar onze oproepmethode waar het kan worden gebruikt voor verdere databasebewerkingen.

def verbinden():
cons = "dbname='tutorial' gebruiker = "postgres" host = "localhost" wachtwoord = "wachtwoord""
proberen:
conn = psycopg2.verbinden (nadelen)
print "Verbonden"
behalve:
print "Ik kan geen verbinding maken met de database"
retour verbinding

Zodra we de verbinding met de PostgreSQL-database tot stand hebben gebracht, kunnen we onze gegevens van de methode get_data() in onze database laden. Psycopg2 en panda's maken dit een heel eenvoudig proces.

De eerste regel definieert de methode die panda's moeten gebruiken om verbinding te maken met de database om het DataFrame te kopiëren. U geeft dezelfde parameters op als uw verbindingsmethode. De tweede regel code houdt het DataFrame bij in de PostgreSQL-database met de methode to_sql().

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

Een snelle blik in onze PostgreSQL pgAdmin-terminal laat zien dat de code het DataFrame met succes in de tabel "close" heeft geladen. Nu we wat gegevens in onze database hebben geladen. We kunnen psycopg gebruiken om enkele query's op de gegevens uit te voeren. De onderstaande methode is geconstrueerd om de verbinding die tot stand is gebracht in onze eerste methode te nemen en een query uit te voeren op onze PostgreSQL-database. Om de 4 SQL-objecten te maken, moeten we nog een importstatement toevoegen add.

van psycopg2 import sql

Om dynamische SQL-opdrachten te maken, gebruikt psycopg tekenreeksopmaak om variabelen in de tekenreeks in te vullen met behulp van de operatoren %s en .

PostrgreSQL is hoofdlettergevoelig. In de methode get_data() dwongen we onze kolomkoppen naar kleine letters. De index is niet opgenomen in deze instructie. Om de hoofdletter "Data" kolomkop in de query door te geven, moeten we deze tussen dubbele aanhalingstekens doorgeven aan PostgreSQL. Om dit in een string in Python te doen, moet je het escape-teken "\" vóór de dubbele aanhalingstekens sturen.

We kunnen de ""%s"" in de tekenreeks vervangen met behulp van de onderstaande syntaxis voor de opmaak van python-tekenreeksen. Dit vervangt de %s door onze datumparameter dt.

Om de gemaakte SQL-query uit te voeren. U moet het dan doorgeven aan de cursor .execute() methode. Door te bellen naar de .fetchall() methode, retourneert u de resultaten van de query. Wanneer afgedrukt naar de console, kunt u de resultaten weergeven.

def get_row(dt, conn):
cr = conn.cursor()
query = sql.SQL(""SELECT aapl from close WHERE ""Date"" = '%s'"" % dt)
cr.uitvoeren (vraag)
print cr.ophalen()

Om deze functie uit te voeren, voegen we de onderstaande regel code toe aan de tutorial_run() methode. U zou vergelijkbare resultaten moeten krijgen als hieronder:.

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

In de volgende methode zullen we de tekenreeksindelingsmethoden gebruiken om meerdere parameters in onze query door te geven. Deze zoekopdracht heeft een datum en drie kolommen. Naast het gebruik van de %s-operator, zullen we de -operator gebruiken om tekenreeksvariabelen in een tekenreeks samen te voegen en deze in onze queryreeks te injecteren. Onze queryreeks gebruikt nu de onderstaande join met een "","" scheidingsteken om meerdere kolomnamen door te geven aan onze query.

def get_cols(dt, col1, col2, col3, conn):
cr = conn.cursor()
query = sql.SQL(""SELECT from close WHERE ""Date"" = '%s'"" % dt).formaat(
sql.SQL(', ').join([sql.Identificatie (col1), sql.Identificatie (col2), sql.Identificatie (col3)]))
cr.uitvoeren (vraag)
print cr.ophalen()

Om onze nieuwe methode te gebruiken, zal ik de onderstaande regel toevoegen aan onze tutorial_run() methode. Je zou de resultaten hieronder moeten zien.

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

De volgende methode die we schrijven, gebruikt twee tekenreeksvervangingen om alle gegevens in onze tabel op te halen, met uitzondering van onze index. Deze methode bouwt voort op onze vorige methode door een tweede notatie voor het vervangen van haakjes ""1"" toe te voegen. Deze keer zijn de haakjes genummerd zodat ze worden vervangen in het bestelformaat notiecode. Onze nieuwe methode voegt de drie kolomparameters samen met een kommascheidingsteken. Bovendien is de tweede parameter in de formaatmethode de tabelvariabele. De queryreeks wordt vervolgens geconstrueerd door de haakjes te vervangen door de parameters in de formaatmethode in volgorde:. Dat is 0 = kolommen en 1 = tabelnaam.

def get_tab(tabel, col1, col2, col3, conn):
cr = conn.cursor()
query = sql.SQL(""SELECTEER 0 uit 1 "").formaat(
sql.SQL(', ').join([sql.Identificatie (col1), sql.ID (col2),
sql.Identifier(col3)]), sql.Identificatie (tabel))
cr.uitvoeren (vraag)
print cr.ophalen()

Om onze nieuwe methode te gebruiken, zal ik de onderstaande regel toevoegen aan onze tutorial_run() methode. Je zou de resultaten hieronder moeten zien.

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

Er zijn nog veel meer methoden om te verkennen in de psycopg-bibliotheek. Dit zou u op weg moeten helpen met een goed begrip van de psycopg-functies. Ik heb hieronder in documentatiepagina's wat meer bronnen gegeven waarmee u de bibliotheek uitgebreider kunt verkennen.

Volledige code

psycopg2 importeren
van psycopg2 import sql
pandas_datareader importeren als gegevens
def get_data (symbolen, startdatum, einddatum):
paneel = gegevens.DataReader (symbolen, 'yahoo', startdatum, einddatum)
df = paneel['Sluiten']
df.kolommen = kaart(str.lager, df.kolommen)
hd = lijst (df)
print df.hoofd()
print hd
retour df
def verbinden():
cons = ""dbname='tutorial' gebruiker = ""postgres"" host = ""localhost"" wachtwoord = ""wachtwoord""""
proberen:
conn = psycopg2.verbinden (nadelen)
print ""Verbonden""
behalve:
print ""Ik kan geen verbinding maken met de database""
retour verbinding
def create_table(tabel, df):
engine = create_engine('postgresql+psycopg2://postgres:[email protected]:5432/tutorial')
df.to_sql(tabel, engine, if_exists=""replace"")
def get_row(dt, conn):
cr = conn.cursor()
query = sql.SQL(""SELECT aapl from close WHERE ""Date"" = '%s'"" % dt)
cr.uitvoeren (vraag)
print cr.ophalen()
def get_cols(dt, col1, col2, col3, conn):
cr = conn.cursor()
query = sql.SQL(""SELECT from close WHERE ""Date"" = '%s'"" % dt).formaat(
sql.SQL(', ').join([sql.Identificatie (col1),
sql.Identificatie (col2), sql.Identificatie (col3)]))
cr.uitvoeren (vraag)
print cr.ophalen()
def get_tab(tabel,col1, col2, col3, conn):
cr = conn.cursor()
query = sql.SQL(""SELECTEER 0 uit 1 "").formaat(
sql.SQL(', ').join([sql.Identificatie (col1), sql.ID (col2),
sql.Identifier(col3)]), sql.Identificatie (tabel))
cr.uitvoeren (vraag)
print cr.ophalen()
def tutorial_run():
conn = verbinden()
symbolen = ['SPY', 'AAPL','GOOG']
df = get_data (symbolen, '2006-01-03', '2017-12-31')
create_table(""close"", df)
get_row(""29-12-2017"",conn)
get_cols(""2017-12-29"",""aapl"",""spion"", ""goog"", conn)
get_tab(""close"", ""aapl"", ""spion"", ""goog"", conn)
if __name__ == ""__main__"":
tutorial_run()

Referenties

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

5 beste arcade-spellen voor Linux
Tegenwoordig zijn computers serieuze machines die worden gebruikt om te gamen. Als je de nieuwe hoge score niet kunt halen, weet je wat ik bedoel. In ...
Strijd om Wesnoth 1.13.6 Ontwikkeling vrijgegeven
Strijd om Wesnoth 1.13.6 die vorige maand werd uitgebracht, is de zesde ontwikkelingsrelease in de 1.13.x-serie en het levert een aantal verbeteringen...
Hoe League Of Legends op Ubuntu 14 te installeren.04
Als je fan bent van League of Legends, dan is dit een kans voor jou om League of Legends te testen. Merk op dat LOL wordt ondersteund op PlayOnLinux a...