Psycopg2

Psycopg2 opplæring

Psycopg2 opplæring

Python, PostgreSQL og Psycopg2 Tutorial

For å utvikle et program utover et enkelt skript, er det nødvendig å vedvare data utenfor minnet til en database.  Det er mange mulige valg for en database, men PostgreSQL er en robust open source-plattform som lett kan skaleres til produksjon.

Python og PostgreSQL kan grensesnitt for å utvikle kraftige applikasjoner raskt.  Psycopg er et PostgreSQL-adapter som kan brukes til å utnytte PostgreSQL gjennom det Python-baserte biblioteket.  Denne opplæringen vil gå gjennom installasjonen av Psycopg2 og noe Python-kode for å demonstrere bruken.

Du kan installere Psycopg2 gjennom terminal pip-kommandoen nedenfor.

$ pip installer psycopg2

Når du installerer, bør du se terminalutgangen nedenfor.

Samler psycopg2
Laster ned 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.7 MB 397 kB / s
Installere innsamlede pakker: psycopg2
Vellykket installert psycopg2-2.7.3.2
Bradleys-Mini: ~ BradleyPatton $

For å importere Psycopg2-pakken til Python-applikasjonen, bruker du kodelinjen nedenfor.

importere psycopg2

For å få litt data å laste inn i databasen vår, har jeg lånt litt kode fra en tidligere opplæring om pandaer. Koden nedenfor vil opprette en pandas DataFrame med historiske data.  Dette vil da bli utnyttet for å lage en tabell i PostgreSQL-tabellen.

def get_data (symboler, startdato, sluttdato):
panel = data.DataReader (symboler, 'yahoo', startdato, sluttdato)
df = panel ['Lukk']
df.kolonner = kart (str.lavere, df.kolonner)
hd = liste (df)
skriv ut df.hode()
skrive ut hd
retur df

Jeg vil nå sette opp noen husholdningskoder som brukes til å kjøre opplæringen. Disse to metodene vil bli brukt til å kalle Psycopg2-metodene vi lager.

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

For å koble til PostgreSQL-databasen, må vi legge til metoden nedenfor. Try \ Except gir noe feilhåndtering i tilfelle den lokale databasen ikke kjører, eller hvis feil tilkoblingsparametere sendes til databasen. Tilkoblingsmetoden i Psycopg2-biblioteket kobles til databasen med parametrene som sendes i tilkoblingsstrengen. Parametrene dine for dbnavn, bruker og passord kan variere. Hvis forbindelsen mislykkes av en eller annen grunn, vil feilmeldingen skrives til konsollen. Denne metoden returnerer tilkoblingsobjektet tilbake til anropsmetoden der den kan brukes til videre databasedrift.

def connect ():
cons = "dbname = 'tutorial' user =" postgres "host =" localhost "password =" password ""
prøve:
conn = psycopg2.koble (ulemper)
skriv ut "Connected"
unntatt:
skriv ut "Jeg kan ikke koble til databasen"
retur tilkobling

Når vi har opprettet forbindelsen til PostgreSQL-databasen, kan vi laste inn dataene våre fra get_data () -metoden i databasen vår. Psycopg2 og pandaer gjør dette til en veldig enkel prosess.

Den første linjen definerer metoden som pandaer skal bruke for å koble til databasen for å kopiere DataFrame. Du vil gi de samme parametrene som tilkoblingsmetoden. Den andre kodelinjen fortsetter DataFrame til PostgreSQL-databasen med to_sql () -metoden.

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

En rask titt i vår PostgreSQL pgAdmin terminal viser at koden vellykket lastet DataFrame i tabellen "lukk". Nå som vi har lastet inn noen data i databasen vår. Vi kan bruke psycopg til å kjøre noen spørsmål om dataene. Metoden nedenfor er konstruert for å ta forbindelsen etablert i vår første metode og kjøre et spørsmål på vår PostgreSQL-database. For å lage de 4 SQL-objektene må vi legge til en ny importuttalelse.

fra psycopg2 import sql

For å lage dynamiske SQL-kommandoer bruker psycopg strengformatering for å fylle ut variabler i strengen ved hjelp av operatorene% s og .

PostrgreSQL er store og små bokstaver. I get_data () -metoden tvang vi kolonneoverskriftene til små bokstaver. Indeksen var ikke inkludert i denne instruksjonen. For å overføre hovedstaden "Data" kolonneoverskrift i spørringen, må vi sende den til PostgreSQL med doble anførselstegn. For å gjøre dette i en streng i Python, må du sende rømningstegnet “\” før doble anførselstegn.

Vi kan erstatte “% s” i strengen ved hjelp av pythonstrengformatering-syntaksen nedenfor. Dette erstatter% s med datoparameteren dt.

For å utføre SQL-spørringen som ble opprettet. Du må deretter sende den til markøren .execute () -metoden. Ved å ringe .fetchall () -metoden, returnerer du resultatene av spørringen. Når du skrives ut på konsollen, kan du vise resultatene.

def get_row (dt, conn):
cr = tilkobling.markør ()
spørring = kvl.SQL ("SELECT aapl from close WHERE" Date "= '% s'"% dt)
cr.utføre (spørring)
skrive ut cr.fetchall ()

For å kjøre denne funksjonen legger vi til nedenstående kodelinje i metoden tutorial_run (). Du bør få lignende resultater som nedenfor.

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

I den neste metoden vil vi bruke strengformatmetodene til å overføre flere parametere til spørringen. Dette spørsmålet tar en dato og tre kolonner. I tillegg til å bruke% s-operatoren, vil vi bruke -operatøren til å knytte strengvariabler til en streng og injisere dem i spørringsstrengen vår. Spørringsstrengen vår bruker nå sammenføyningen nedenfor med en "," skilletegn for å sende flere kolonnenavn til spørringen.

def get_cols (dt, col1, col2, col3, conn):
cr = tilkobling.markør ()
spørring = kvl.SQL ("SELECT fra Lukk WHERE" Date "= '% s'"% dt).format(
kvm.SQL (',').bli med ([sql.Identifikator (col1), kvm.Identifikator (col2), kvm.Identifier (col3)]))
cr.utføre (spørring)
skrive ut cr.fetchall ()

For å bruke den nye metoden vil jeg legge til linjen nedenfor i vår tutorial_run () -metode. Du bør se resultatene nedenfor.

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

Den neste metoden vi skriver, bruker to strengerstatninger for å hente alle dataene i tabellen vår, med unntak av indeksen vår. Denne metoden bygger på vår forrige metode ved å legge til en ny erstatningsbrakettnotasjon "1". Denne gangen er parentesene nummerert slik at de byttes ut i ordreformatkoden. Den nye metoden vår forener de tre kolonneparametrene med kommautskiller. I tillegg er den andre parameteren i formatmetoden tabellvariabelen. Spørringsstrengen konstrueres deretter ved å erstatte parentesene med parametrene i formatmetoden i rekkefølge. Det er 0 = kolonner og 1 = tabellnavn.

def get_tab (tabell, col1, col2, col3, conn):
cr = tilkobling.markør ()
spørring = kvl.SQL ("VELG 0 fra 1").format(
kvm.SQL (',').bli med ([sql.Identifikator (col1), kvm.Identifikator (col2),
kvm.Identifier (col3)]), kvl.Identifikator (tabell)
cr.utføre (spørring)
trykk cr.fetchall ()

For å bruke den nye metoden vil jeg legge til linjen nedenfor i vår tutorial_run () -metode. Du bør se resultatene nedenfor.

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

Det er mange flere metoder å utforske i psycopg-biblioteket. Dette skal komme i gang med en god forståelse av psycopg-funksjoner. Jeg har gitt noen flere ressurser nedenfor på dokumentasjonssider som gjør at du kan utforske biblioteket mer omfattende.

Full kode

importere psycopg2
fra psycopg2 import sql
importer pandas_datareader som data
def get_data (symboler, startdato, sluttdato):
panel = data.DataReader (symboler, 'yahoo', startdato, sluttdato)
df = panel ['Lukk']
df.kolonner = kart (str.lavere, df.kolonner)
hd = liste (df)
skriv ut df.hode()
skrive ut hd
retur df
def connect ():
cons = "dbname = 'tutorial' user =" postgres "host =" localhost "password =" password ""
prøve:
conn = psycopg2.koble (ulemper)
skriv ut "Connected"
unntatt:
skriv ut "Jeg kan ikke koble til databasen"
retur tilkobling
def create_table (tabell, df):
engine = create_engine ('postgresql + psycopg2: // postgres: [email protected]: 5432 / tutorial')
df.to_sql (tabell, motor, if_exists = "erstatt")
def get_row (dt, conn):
cr = tilkobling.markør ()
spørring = kvl.SQL ("SELECT aapl from close WHERE" Date "= '% s'"% dt)
cr.utføre (spørring)
trykk cr.fetchall ()
def get_cols (dt, col1, col2, col3, conn):
cr = tilkobling.markør ()
spørring = kvl.SQL ("SELECT fra Lukk WHERE" Date "= '% s'"% dt).format(
kvm.SQL (',').bli med ([sql.Identifikator (col1),
kvm.Identifikator (col2), kvm.Identifier (col3)]))
cr.utføre (spørring)
trykk cr.fetchall ()
def get_tab (tabell, col1, col2, col3, conn):
cr = tilkobling.markør ()
spørring = kvl.SQL ("VELG 0 fra 1").format(
kvm.SQL (',').bli med ([sql.Identifikator (col1), kvm.Identifikator (col2),
kvm.Identifier (col3)]), kvl.Identifikator (tabell)
cr.utføre (spørring)
trykk cr.fetchall ()
def tutorial_run ():
conn = connect ()
symboler = ['SPY', 'AAPL', 'GOOG']
df = get_data (symboler, '2006-01-03', '2017-12-31')
create_table ("lukk", df)
get_row ("2017-12-29", konn)
get_cols ("2017-12-29", "aapl", "spy", "goog", conn)
get_tab ("close", "aapl", "spy", "goog", conn)
hvis __name__ == "__main__":
tutorial_run ()

Referanser

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

Mus Markøren hopper eller beveger seg tilfeldig mens du skriver inn Windows 10
Markøren hopper eller beveger seg tilfeldig mens du skriver inn Windows 10
Hvis du finner ut at musemarkøren hopper eller beveger seg alene, automatisk, tilfeldig mens du skriver inn Windows-bærbar PC eller datamaskin, kan no...
Mus Hvordan reversere rulle retning for mus og styreplater i Windows 10
Hvordan reversere rulle retning for mus og styreplater i Windows 10
Mus og Pekeplates gjør ikke bare databehandling enkelt, men mer effektivt og mindre tidkrevende. Vi kan ikke forestille oss et liv uten disse enhetene...
Mus Hvordan endre musepekeren og markørstørrelse, farge og skjema på Windows 10
Hvordan endre musepekeren og markørstørrelse, farge og skjema på Windows 10
Musepekeren og markøren i Windows 10 er veldig viktige aspekter ved operativsystemet. Dette kan sies også for andre operativsystemer, så i sannhet er ...