Psycopg2

„Psycopg2“ pamoka

„Psycopg2“ pamoka

„Python“, „PostgreSQL“ ir „Psycopg2“ pamoka

Norint sukurti programą už paprasto scenarijaus, būtina duomenų bazėje išsaugoti duomenis už atminties ribų.  Yra daug galimų duomenų bazės pasirinkimų, tačiau „PostgreSQL“ yra tvirta atvirojo kodo platforma, kurią galima lengvai pritaikyti gamybai.

„Python“ ir „PostgreSQL“ gali būti susietos, kad būtų galima greitai sukurti galingas programas.  „Psycopg“ yra „PostgreSQL“ adapteris, kurį galima naudoti naudojant „PostgreSQL“ per „Python“ biblioteką.  Ši pamoka apžvelgs „Psycopg2“ ir kai kurių „Python“ kodų diegimą, kad pademonstruotų jo naudojimą.

„Psycopg2“ galite įdiegti naudodami žemiau esančią komandą „terminal pip“.

$ pip įdiekite psycopg2

Diegdami turėtumėte pamatyti terminalo išvestį žemiau.

Psycopg2 rinkimas
Atsisiųsti 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.7 MB)
100% | ████████████████████████████████ | 1.7 MB 397 kB / s
Surinktų paketų diegimas: psycopg2
Sėkmingai įdiegta „psycopg2-2“.7.3.2
„Bradley-Mini“: ~ „BradleyPatton $“

Norėdami importuoti „Psycopg2“ paketą į savo „Python“ programą, naudokite toliau pateiktą kodo eilutę.

importuoti psycopg2

Norėdamas įkelti duomenų į mūsų duomenų bazę, pasiskolinau kodą iš ankstesnės pandų pamokos. Žemiau pateiktas kodas sukurs „pandas DataFrame“ su istoriniais duomenimis.  Tada tai bus panaudota kuriant lentelę „PostgreSQL“ lentelėje.

def get_data (simboliai, start_date, end_date):
skydelis = duomenys.„DataReader“ (simboliai, „yahoo“, pradžios data, pabaigos_ data)
df = skydelis ['Uždaryti']
df.stulpeliai = žemėlapis (str.žemesnis, df.stulpeliai)
hd = sąrašas (df)
spausdinti df.galva()
spausdinti hd
grįžti df

Dabar aš nustatysiu tam tikrą namų tvarkymo kodą, naudojamą pamokai paleisti. Šie du metodai bus naudojami norint sukurti mūsų sukurtus „Psycopg2“ metodus.

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

Norėdami prisijungti prie „PostgreSQL“ duomenų bazės, turėsime pridėti žemiau pateiktą metodą. „Try \ Except“ pateikia klaidų tvarkymą tuo atveju, jei neveikia vietinė duomenų bazė arba neteisingi ryšio parametrai perduodami į duomenų bazę. „Psycopg2“ bibliotekoje esantis prisijungimo metodas prisijungia prie duomenų bazės su parametrais, perduotais ryšio eilutėje. Jūsų dbname, vartotojo ir slaptažodžio parametrai gali skirtis. Jei ryšys dėl kokių nors priežasčių nepavyksta, klaidos pranešimas bus parašytas konsolėje. Šis metodas grąžina ryšio objektą į mūsų skambučio metodą, kur jį galima naudoti tolesnėms duomenų bazės operacijoms atlikti.

def connect ():
minusai = "dbname = 'tutorial' user =" postgres "host =" localhost "password =" password ""
bandyti:
jungtis = psycopg2.prisijungti (trūkumai)
spausdinti „Prisijungta“
išskyrus:
spausdinti "Nepavyksta prisijungti prie duomenų bazės"
grįžti jung

Užmezgę ryšį su „PostgreSQL“ duomenų baze, savo duomenis iš metodo get_data () galime įkelti į savo duomenų bazę. Psycopg2 ir pandos daro tai labai paprastu procesu.

Pirmoje eilutėje apibūdinamas metodas, kurį pandos turėtų naudoti prisijungdami prie duomenų bazės, kad nukopijuotų „DataFrame“. Pateiksite tuos pačius parametrus kaip ir prisijungimo būdą. Antroji kodo eilutė išlieka „DataFrame“ į „PostgreSQL“ duomenų bazę naudojant metodą to_sql ().

def create_table (lentelė, df):
variklis = create_engine ('postgresql + psycopg2: // postgres: [apsaugotas el. paštas]: 5432 / pamoka')
df.to_sql (lentelė, variklis, if_exists = 'pakeisti')

Greitas „PostgreSQL pgAdmin“ terminalo žvilgsnis rodo, kad kodas sėkmingai įkėlė „DataFrame“ į lentelę „uždaryti“. Dabar, kai turime duomenų, įkeliamų į mūsų duomenų bazę. Mes galime naudoti „psycopg“, kad vykdytume kai kurias duomenų užklausas. Žemiau pateiktas metodas sukurtas taip, kad būtų galima užmegzti ryšį, užmegztą mūsų pirmuoju metodu, ir vykdyti užklausą mūsų „PostgreSQL“ duomenų bazėje. Norėdami sukurti 4 SQL objektus, turime pridėti dar vieną importo sakinį.

iš psycopg2 importo kv

Siekdamas sukurti dinamines SQL komandas, „psycopg“ naudoja eilutės formatavimą, kad kintamieji būtų įtraukti į eilutę naudojant operatorius% s ir .

„PostrgreSQL“ skiria didžiosios ir mažosios raidės. Naudodami metodą get_data () privertėme mažąsias stulpelių antraštes. Rodyklė nebuvo įtraukta į šią instrukciją. Norėdami užklausoje perduoti didžiąją „Duomenų“ stulpelio antraštę, turime ją pateikti „PostgreSQL“ kabutėse. Norėdami tai padaryti „Python“ eilutėje, prieš dvigubas kabutes turite nusiųsti pabėgimo simbolį „\“.

„% S“ eilutėje galime pakeisti naudodami žemiau esančią python eilutės formatavimo sintaksę. Tai pakeis% s mūsų datos parametru dt.

Vykdyti sukurtą SQL užklausą. Tada turėsite jį perduoti žymekliui .vykdyti () metodą. Skambindamas .metodas „fetchall“) grąžinsite užklausos rezultatus. Kai atspausdinate konsolėje, galite rodyti rezultatus.

def get_row (dt, conn):
cr = jungtis.žymeklis ()
užklausa = kv.SQL ("SELECT aapl from close WHERE" Data "= '% s'"% dt)
kr.vykdyti (užklausa)
spausdinti kr.fetchall ()

Norėdami paleisti šią funkciją, mes įtraukiame žemiau esančią kodo eilutę į metodą tutorial_run (). Turėtumėte gauti panašių rezultatų, kaip nurodyta toliau.

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

Kitame metode mes naudosime eilutės formato metodus, kad į užklausą būtų perduodami keli parametrai. Ši užklausa užtruks datą ir tris stulpelius. Be operatoriaus% s naudojimo, naudosime operatorių , kad sujungtume eilutės kintamuosius į eilutę ir įvesime juos į užklausos eilutę. Dabar mūsų užklausos eilutė naudoja žemiau esantį sujungimą su „,“ skirikliu, kad į užklausą būtų perduodami keli stulpelių pavadinimai.

def get_cols (dt, col1, col2, col3, jungtis):
cr = jungtis.žymeklis ()
užklausa = kv.SQL ("SELECT iš uždarymo WHERE" Data "= '% s'"% dt).formatas (
kv.SQL (',').prisijungti ([sql.Identifikatorius (col1), kv.Identifikatorius (col2), kv.Identifikatorius (col3)]))
kr.vykdyti (užklausa)
spausdinti kr.fetchall ()

Norėdamas naudoti mūsų naują metodą, aš pridėsiu žemiau esančią eilutę prie mūsų tutorial_run () metodo. Rezultatus turėtumėte pamatyti žemiau.

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

Kitas metodas, kurį parašysime, naudos du eilutės pakaitalus, kad būtų ištraukti visi lentelės duomenys, išskyrus indeksą. Šis metodas pagrįstas ankstesniu metodu, pridedant antrą pakeitimo skliausto žymėjimą „1“. Šį kartą skliausteliuose yra numeriai, kad jie būtų pakeisti užsakymo formato sąvokos kodu. Naujasis mūsų metodas sujungia tris stulpelių parametrus kableliais. Be to, antrasis formato metodo parametras yra lentelės kintamasis. Tada užklausos eilutė sukuriama pakeičiant skliaustus formato metodo parametrais. Tai yra 0 = stulpeliai ir 1 = lentelės pavadinimas.

def get_tab (lentelė, col1, col2, col3, jungtis):
cr = jungtis.žymeklis ()
užklausa = kv.SQL („SELECT 0 from 1“).formatas (
kv.SQL (',').prisijungti ([sql.Identifikatorius (col1), kv.Identifikatorius (col2),
kv.Identifier (col3)]), kv.Identifikatorius (lentelė))
kr.vykdyti (užklausa)
spausdinti kr.fetchall ()

Norėdamas naudoti mūsų naują metodą, aš pridėsiu žemiau esančią eilutę prie mūsų tutorial_run () metodo. Rezultatus turėtumėte pamatyti žemiau.

get_tab ("uždaryti", "aapl", "šnipas", "goog", jungtis)

Psycopg bibliotekoje yra daug daugiau metodų, kuriuos reikia ištirti. Tai turėtų padėti jums gerai suprasti psycopg funkcijas. Toliau pateikiau dar keletą išteklių dokumentacijos puslapiuose, kurie leis jums plačiau tyrinėti biblioteką.

Visas kodas

importuoti psycopg2
iš psycopg2 importo kv
importuoti pandas_datareader kaip duomenis
def get_data (simboliai, start_date, end_date):
skydelis = duomenys.„DataReader“ (simboliai, „yahoo“, pradžios data, pabaigos_ data)
df = skydelis ['Uždaryti']
df.stulpeliai = žemėlapis (str.žemesnis, df.stulpeliai)
hd = sąrašas (df)
spausdinti df.galva()
spausdinti hd
grįžti df
def connect ():
minusai = "dbname = 'tutorial' user =" postgres "host =" localhost "password =" password ""
bandyti:
jungtis = psycopg2.prisijungti (trūkumai)
spausdinti „Prisijungta“
išskyrus:
spausdinti "Nepavyksta prisijungti prie duomenų bazės"
grįžti jung
def create_table (lentelė, df):
variklis = create_engine ('postgresql + psycopg2: // postgres: [apsaugotas el. paštas]: 5432 / pamoka')
df.to_sql (lentelė, variklis, if_exists = "pakeisti")
def get_row (dt, conn):
cr = jungtis.žymeklis ()
užklausa = kv.SQL ("SELECT aapl from close WHERE" Data "= '% s'"% dt)
kr.vykdyti (užklausa)
spausdinti kr.fetchall ()
def get_cols (dt, col1, col2, col3, jungtis):
cr = jungtis.žymeklis ()
užklausa = kv.SQL ("SELECT iš uždarymo WHERE" Data "= '% s'"% dt).formatas (
kv.SQL (',').prisijungti ([sql.Identifikatorius (col1),
kv.Identifikatorius (col2), kv.Identifikatorius (col3)]))
kr.vykdyti (užklausa)
spausdinti kr.fetchall ()
def get_tab (lentelė, col1, col2, col3, jungtis):
cr = jungtis.žymeklis ()
užklausa = kv.SQL („SELECT 0 from 1“).formatas (
kv.SQL (',').prisijungti ([sql.Identifikatorius (col1), kv.Identifikatorius (col2),
kv.Identifier (col3)]), kv.Identifikatorius (lentelė))
kr.vykdyti (užklausa)
spausdinti kr.fetchall ()
def tutorial_run ():
jungtis = prisijungti ()
simboliai = ['SPY', 'AAPL', 'GOOG']
df = get_data (simboliai, '2006-01-03', '2017-12-31')
create_table ("uždaryti", df)
get_row ("2017-12-29", jungtis)
get_cols ("2017-12-29", "aapl", "spy", "goog", conn)
get_tab ("uždaryti", "aapl", "šnipas", "goog", jungtis)
jei __pavadinimas = = "__main__":
tutorial_run ()

Literatūra

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

Kaip naudoti „Xdotool“, norint paskatinti pelės paspaudimus ir klavišų paspaudimus sistemoje „Linux“
„Xdotool“ yra nemokamas ir atviro kodo komandinės eilutės įrankis, skirtas pelės paspaudimams ir klavišų paspaudimams imituoti. Šis straipsnis apims t...
5 populiariausi „Linux“ skirtų ergonomiškų kompiuterinių pelių produktai
Ar ilgalaikis kompiuterio naudojimas sukelia riešo ar pirštų skausmą?? Ar jūs kenčiate nuo sąnarių standumo ir nuolat turite paspausti rankas? Ar jauč...
How to Change Mouse and Touchpad Settings Using Xinput in Linux
Most Linux distributions ship with “libinput” library by default to handle input events on a system. It can process input events on both Wayland and X...