Psycopg2

Psycopg2-handledning

Psycopg2-handledning

Python, PostgreSQL och Psycopg2 Tutorial

För att utveckla en applikation utöver ett enkelt skript är det nödvändigt att behålla data utanför minnet i en databas.  Det finns många möjliga val för en databas, men PostgreSQL är en robust öppen källkodsplattform som enkelt kan skala till produktion.

Python och PostgreSQL kan gränssnitt för att snabbt utveckla kraftfulla applikationer.  Psycopg är en PostgreSQL-adapter som kan användas för att utnyttja PostgreSQL genom det Python-baserade biblioteket.  Denna handledning går igenom installationen av Psycopg2 och lite Python-kod för att visa dess användning.

Du kan installera Psycopg2 genom kommandot nedan för terminal pip.

$ pip installera psycopg2

När du installerar bör du se terminalutgången nedan.

Samlar in psycopg2
Hämtar 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
Installera samlade paket: psycopg2
Psycopg2-2 har installerats.7.3.2
Bradleys-Mini: ~ BradleyPatton $

För att importera Psycopg2-paketet till din Python-applikation använder du nedanstående kodrad.

importera psycopg2

För att få in data i vår databas har jag lånat lite kod från en tidigare handledning om pandor. Koden nedan skapar en pandas DataFrame med historisk data.  Detta kommer sedan att utnyttjas för att skapa en tabell i PostgreSQL-tabellen.

def get_data (symboler, startdatum, slutdatum):
panel = data.DataReader (symboler, 'yahoo', startdatum, slutdatum)
df = panel ['Stäng']
df.kolumner = karta (str.lägre, df.kolumner)
hd = lista (df)
skriv ut df.huvud()
skriv ut hd
returnera df

Jag kommer nu att ställa in lite hushållskod som används för att köra handledningen. Dessa två metoder kommer att användas för att kalla de Psycopg2-metoder som vi skapar.

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

För att kunna ansluta till PostgreSQL-databasen måste vi lägga till nedanstående metod. Try \ Except ger felhantering i händelse av att den lokala databasen inte körs eller felaktiga anslutningsparametrar skickas till databasen. Anslutningsmetoden i Psycopg2-biblioteket ansluter till databasen med parametrarna som skickas i anslutningssträngen. Dina parametrar för dbname, användare och lösenord kan skilja sig åt. Om anslutningen av någon anledning misslyckas kommer felmeddelandet att skrivas till konsolen. Denna metod returnerar anslutningsobjektet till vår anropsmetod där det kan användas för ytterligare databasåtgärder.

def connect ():
cons = "dbname = 'tutorial' user =" postgres "host =" localhost "password =" password ""
Prova:
conn = psycopg2.ansluta (nackdelar)
skriva ut "Connected"
bortsett från:
skriva ut "Jag kan inte ansluta till databasen"
returanslutning

När vi väl har upprättat anslutningen till PostgreSQL-databasen kan vi ladda våra data från get_data () -metoden i vår databas. Psycopg2 och pandor gör detta till en mycket enkel process.

Den första raden definierar metoden som pandor ska använda för att ansluta till databasen för att kopiera DataFrame. Du kommer att tillhandahålla samma parametrar som din anslutningsmetod. Den andra raden kod fortsätter DataFrame till PostgreSQL-databasen med metoden to_sql ().

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

En snabb titt i vår PostgreSQL pgAdmin-terminal visar att koden framgångsrikt laddade DataFrame i tabellen "stäng". Nu när vi har laddat in lite data i vår databas. Vi kan använda psycopg för att köra några frågor om data. Metoden nedan är konstruerad för att ta den anslutning som upprättades i vår första metod och köra en fråga i vår PostgreSQL-databas. För att skapa de fyra SQL-objekten måste vi lägga till ytterligare ett importuttalande.

från psycopg2 importera sql

För att skapa dynamiska SQL-kommandon använder psycopg strängformatering för att fylla variabler i strängen med operatorerna% s och .

PostrgreSQL är skiftlägeskänslig. I metoden get_data () tvingade vi våra kolumnrubriker till små bokstäver. Indexet ingick inte i denna instruktion. För att skicka huvudet "Data" kolumnrubrik i frågan måste vi skicka det till PostgreSQL i dubbla citat. För att göra detta i en sträng i Python måste du skicka flyktecknet “\” innan de dubbla citaten.

Vi kan ersätta "% s" i strängen med hjälp av pythonsträngens formateringssyntax nedan. Detta ersätter% s med vår datumparameter dt.

Att utföra SQL-frågan som skapades. Du måste sedan skicka det till markören .execute () -metoden. Genom att ringa .fetchall () -metoden, du returnerar resultaten av frågan. När du skrivs ut på konsolen kan du visa resultaten.

def get_row (dt, conn):
cr = anslutning.markör ()
fråga = sql.SQL ("VÄLJ aapl från nära VAR" Datum "= '% s'"% dt)
cr.exekvera (fråga)
tryck cr.fetchall ()

För att köra denna funktion lägger vi till nedanstående kodrad i metoden tutorial_run (). Du bör få liknande resultat som nedan.

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

I nästa metod använder vi strängformatmetoderna för att skicka in flera parametrar i vår fråga. Den här frågan tar ett datum och tre kolumner. Förutom att använda% s-operatören använder vi -operatören för att sammanfoga strängvariabler i en sträng och injicera dem i vår frågesträng. Vår frågesträng använder nu kopplingen nedan med en "," separator för att skicka flera kolumnnamn till vår fråga.

def get_cols (dt, col1, col2, col3, conn):
cr = anslutning.markör ()
fråga = sql.SQL ("VÄLJ från nära VAR" Datum "= '% s'"% dt).formatera(
kvm.SQL (',').gå med ([sql.Identifierare (kol1), kvm.Identifierare (col2), sql.Identifierare (col3)]))
cr.exekvera (fråga)
tryck cr.fetchall ()

För att använda vår nya metod lägger jag till nedanstående rad i vår tutorial_run () -metod. Du bör se resultaten nedan.

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

Nästa metod som vi skriver kommer att använda två strängersättningar för att dra alla data i vår tabell med undantag för vårt index. Den här metoden bygger på vår tidigare metod genom att lägga till en andra ersättningsfäste "1". Den här gången är parenteserna numrerade så att de ersätts i orderformatkod. Vår nya metod förenar de tre kolumnparametrarna med kommaseparator. Dessutom är den andra parametern i formatmetoden tabellvariabeln. Frågesträngen konstrueras sedan genom att ersätta parenteserna med parametrarna i formatmetoden i ordning. Det är 0 = kolumner och 1 = tabellnamn.

def get_tab (tabell, col1, col2, col3, conn):
cr = anslutning.markör ()
fråga = sql.SQL ("VÄLJ 0 från 1").formatera(
kvm.SQL (',').gå med ([sql.Identifierare (kol1), kvm.Identifierare (col2),
kvm.Identifierare (col3)]), sql.Identifierare (tabell)
cr.exekvera (fråga)
tryck cr.fetchall ()

För att kunna använda vår nya metod lägger jag till nedanstående rad till vår tutorial_run () -metod. Du bör se resultaten nedan.

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

Det finns många fler metoder att utforska i psycopg-biblioteket. Detta bör komma igång med en god förståelse för psycopg-funktioner. Jag har tillhandahållit några fler resurser nedan på dokumentationssidor som gör att du kan utforska biblioteket mer ingående.

Fullständig kod

importera psycopg2
från psycopg2 importera sql
importera pandas_datareader som data
def get_data (symboler, startdatum, slutdatum):
panel = data.DataReader (symboler, 'yahoo', startdatum, slutdatum)
df = panel ['Stäng']
df.kolumner = karta (str.lägre, df.kolumner)
hd = lista (df)
skriv ut df.huvud()
skriv ut hd
returnera df
def connect ():
cons = "dbname = 'tutorial' user =" postgres "host =" localhost "password =" password ""
Prova:
conn = psycopg2.ansluta (nackdelar)
skriva ut "Connected"
bortsett från:
skriva ut "Jag kan inte ansluta till databasen"
returanslutning
def create_table (tabell, df):
engine = create_engine ('postgresql + psycopg2: // postgres: [email protected]: 5432 / tutorial')
df.to_sql (tabell, motor, if_exists = "ersätt")
def get_row (dt, conn):
cr = anslutning.markör ()
fråga = sql.SQL ("VÄLJ aapl från nära VAR" Datum "= '% s'"% dt)
cr.exekvera (fråga)
tryck cr.fetchall ()
def get_cols (dt, col1, col2, col3, conn):
cr = anslutning.markör ()
fråga = sql.SQL ("VÄLJ från nära VAR" Datum "= '% s'"% dt).formatera(
kvm.SQL (',').gå med ([sql.Identifierare (kol1),
kvm.Identifierare (col2), sql.Identifierare (col3)]))
cr.exekvera (fråga)
tryck cr.fetchall ()
def get_tab (tabell, col1, col2, col3, conn):
cr = anslutning.markör ()
fråga = sql.SQL ("VÄLJ 0 från 1").formatera(
kvm.SQL (',').gå med ([sql.Identifierare (kol1), kvm.Identifierare (col2),
kvm.Identifierare (col3)]), sql.Identifierare (tabell)
cr.exekvera (fråga)
tryck cr.fetchall ()
def tutorial_run ():
ansluta = ansluta ()
symboler = ['SPY', 'AAPL', 'GOOG']
df = get_data (symboler, '2006-01-03', '2017-12-31')
skapa_tabell ("stäng", df)
get_row ("2017-12-29", anslutning)
get_cols ("2017-12-29", "aapl", "spy", "goog", conn)
get_tab ("close", "aapl", "spy", "goog", conn)
om __name__ == "__main__":
tutorial_run ()

Referenser

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

Vulkan för Linux-användare
Med varje ny generation grafikkort ser vi spelutvecklare driva gränserna för grafisk trohet och komma ett steg närmare fotorealism. Men trots all kred...
OpenTTD vs Simutrans
Att skapa din egen transportsimulering kan vara rolig, avkopplande och extremt lockande. Det är därför du måste se till att du testar så många spel so...
OpenTTD-handledning
OpenTTD är ett av de mest populära affärssimuleringsspelen där ute. I det här spelet måste du skapa en underbar transportaffär. Du kommer dock att bör...