Psycopg2

Psycopg2 õpetus

Psycopg2 õpetus

Pythoni, PostgreSQL ja Psycopg2 õpetus

Rakenduse arendamiseks väljaspool lihtsat skripti on vaja andmed väljaspool mälu andmebaasi säilitada.  Andmebaasi jaoks on palju võimalikke valikuid, kuid PostgreSQL on jõuline avatud lähtekoodiga platvorm, mida saab hõlpsasti tootmiseks laiendada.

Võimsate rakenduste kiireks väljatöötamiseks saab liidestada Pythoni ja PostgreSQL-i.  Psycopg on PostgreSQL-adapter, mida saab kasutada Pythoni põhise teegi kaudu PostgreSQL-i kasutamiseks.  Selles õpetuses tutvustatakse Psycopg2 ja mõne Pythoni koodi installimist, et selle kasutamist demonstreerida.

Psycopg2 saate installida terminali allpool oleva käsu kaudu.

$ pip install psycopg2

Paigaldamisel peaksite nägema terminali väljundit allpool.

Psycopg2 kogumine
Psycopg2-2 allalaadimine.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
Kogutud pakettide installimine: psycopg2
Psycopg2-2 installimine õnnestus.7.3.2
Bradleys-Mini: ~ BradleyPatton $

Psycopg2 paketi importimiseks oma Pythoni rakendusse kasutage allolevat koodirida.

impordi psycopg2

Andmete saamiseks meie andmebaasi laadimiseks olen laenanud koodi eelmisest pandade õpetusest. Allolev kood loob ajalooliste andmetega pandade DataFrame'i.  Seejärel kasutatakse seda tabeli loomiseks PostgreSQL-i tabelis.

def get_data (sümbolid, alguskuupäev, lõppkuupäev):
paneel = andmed.DataReader (sümbolid, 'yahoo', alguskuupäev, lõppkuupäev)
df = paneel ['Sule']
df.veerud = kaart (str.madalam, df.veerud)
hd = loend (df)
print df.pea ()
trükk hd
tagasi df

Panen nüüd paika koduõppe koodi, mida õpetuse käitamiseks kasutatakse. Neid kahte meetodit kasutatakse meie loodud Psycopg2 meetodite kutsumiseks.

def tutorial_run ():
sümbolid = ['SPY', 'AAPL', 'GOOG']
df = get_data (sümbolid, '2006-01-03', '2017-12-31')
kui __nimi__ == "__main__":
tutorial_run ()

PostgreSQL-i andmebaasiga ühenduse loomiseks peame lisama allpool toodud meetodi. Try \ Except pakub mõningaid tõrkeid juhul, kui kohalik andmebaas ei tööta või andmebaasile edastatakse valed ühenduse parameetrid. Psycopg2 teegi ühendamismeetod ühendub andmebaasiga ühenduse stringis edastatud parameetritega. Parameetrid dbname, kasutaja ja parooli jaoks võivad erineda. Kui ühendus mingil põhjusel nurjub, kirjutatakse tõrketeade konsooli. See meetod tagastab ühenduse objekti tagasi meie kõnemeetodisse, kus seda saab kasutada edasiste andmebaasitoimingute jaoks.

def connect ():
miinused = "dbname = 'õpetus' user =" postgres "host =" localhost "password =" parool ""
proovige:
conn = psycopg2.ühendama (miinused)
print "ühendatud"
välja arvatud:
print "Ma ei saa andmebaasiga ühendust luua"
tagasikülg

Kui oleme ühenduse PostgreSQL andmebaasiga loonud, saame oma andmed meetodist get_data () oma andmebaasi laadida. Psycopg2 ja pandad muudavad selle väga lihtsaks protsessiks.

Esimene rida määratleb meetodi, mida pandad peaksid kasutama andmebaasiga ühenduse loomiseks, et DataFrame'i kopeerida. Esitate samad parameetrid nagu teie ühenduse meetod. Teine koodirida püsib DataFrame'i PostgreSQL andmebaasi meetodiga to_sql ().

def create_table (tabel, df):
mootor = create_engine ('postgresql + psycopg2: // postgres: [meiliga kaitstud]: 5432 / õpetus')
df.to_sql (tabel, mootor, if_exists = 'asenda')

Kiire pilk meie PostgreSQL pgAdmini terminali näitab, et kood laadis DataFrame'i edukalt tabelisse "close". Nüüd, kui meil on osa andmebaasi laaditud andmeid. Andmete kohta päringute käivitamiseks saame kasutada psycopgi. Allpool toodud meetod on loodud selleks, et võtta meie esimeses meetodis loodud ühendus ja käivitada päring meie PostgreSQL andmebaasis. 4 SQL-objekti loomiseks peame lisama veel ühe impordilause.

lehelt psycopg2 impordi sql

Dünaamiliste SQL-käskude loomiseks kasutab psycopg stringivormingut, et asustada muutujad stringidesse, kasutades operaatoreid% s ja .

PostrgreSQL on tõstutundlik. Meetodis get_data () sundisime oma veerupäiseid väiketähtedeks. Indeksit selles juhendis ei lisatud. Päringus suure veeru päise „Data” edastamiseks peame selle topelt jutumärkides edastama PostgreSQL-ile. Selleks Pythonis stringina peate enne topeltpakkumisi saatma põgenemismärgi “\”.

Stringi „% s” saame asendada allpool oleva pythoni stringi vormindamise süntaksiga. See asendab% s meie kuupäeva parameetriga dt.

Loodud SQL-päringu käivitamiseks. Seejärel peate selle kursorile edastama .execute () meetod. Helistades .meetod fetchall () tagastate päringu tulemused. Konsooli printimisel saate tulemusi kuvada.

def get_row (dt, ühendus):
cr = konn.kursor ()
päring = sql.SQL ("SELECT aapl lähedalt WHERE" Kuupäev "= '% s'"% dt)
kr.täitma (päring)
print kr.fetchall ()

Selle funktsiooni käivitamiseks lisame allpool oleva koodirea meetodile tutorial_run (). Peaksite saama allpool toodud sarnaseid tulemusi.

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

Järgmises meetodis kasutame stringivormingu meetodeid, et edastada päringusse mitu parameetrit. See päring võtab kuupäeva ja kolm veergu. Lisaks operaatori% s kasutamisele kasutame operaatorit , et ühendada stringimuutujad stringiks ja sisestada need meie päringusse. Meie päringustring kasutab nüüd allpool olevat liitumist eraldajaga “,”, et edastada meie päringule mitu veerunime.

def get_cols (dt, col1, col2, col3, ühendus):
cr = konn.kursor ()
päring = sql.SQL ("SELECT lähedalt WHERE" Date "= '% s'"% dt).vorming (
ruutmeetrit.SQL (',').liitu ([sql.Identifier (col1), sql.Identifier (col2), sql.Identifier (col3)]))
kr.täitma (päring)
print kr.fetchall ()

Meie uue meetodi kasutamiseks lisan allpool toodud rea meie meetodile tutorial_run (). Tulemused peaksid olema allpool.

get_cols ("2017-12-29", "aapl", "spioon", "goog", kontuur)

Järgmine meie kirjutatud meetod kasutab kahte stringi asendust, et tõmmata kõik meie tabeli andmed, välja arvatud meie register. See meetod põhineb meie eelmisel meetodil, lisades teise asendussulgude märke "1". Seekord on sulgud nummerdatud nii, et need asendatakse järjestuse vormingu mõistekoodiga. Meie uus meetod ühendab kolm veeru parameetrit komaga. Lisaks on vormindamismeetodi teine ​​parameeter tabeli muutuja. Seejärel koostatakse päringistring, asendades sulgud järjestuses vormingu meetodi parameetritega. See on 0 = veerud ja 1 = tabeli nimi.

def get_tab (tabel, col1, col2, col3, ühendus):
cr = konn.kursor ()
päring = sql.SQL ("SELECT 0 alates 1").vorming (
ruutmeetrit.SQL (',').liitu ([sql.Identifier (col1), sql.Identifier (col2),
ruutmeetrit.Identifier (col3)]), sql.Identifier (tabel))
kr.täitma (päring)
print kr.fetchall ()

Meie uue meetodi kasutamiseks lisan meie tutorial_run () meetodile allpool oleva rea. Tulemused peaksid olema allpool.

get_tab ("lähedal", "aapl", "spioon", "goog", ühendaja)

Psycopgi teegis on uurimiseks palju muid meetodeid. See peaks alustama psycopg-funktsioonide hea mõistmisega. Allpool on dokumendilehtedel esitatud veel mõned ressursid, mis võimaldavad teil raamatukogu ulatuslikumalt uurida.

Täielik kood

impordi psycopg2
lehelt psycopg2 impordi sql
impordi pandas_datareader andmetena
def get_data (sümbolid, alguskuupäev, lõppkuupäev):
paneel = andmed.DataReader (sümbolid, 'yahoo', alguskuupäev, lõppkuupäev)
df = paneel ['Sule']
df.veerud = kaart (str.madalam, df.veerud)
hd = loend (df)
print df.pea ()
trükk hd
tagasi df
def connect ():
miinused = "dbname = 'õpetus' user =" postgres "host =" localhost "password =" parool ""
proovige:
conn = psycopg2.ühendama (miinused)
print "ühendatud"
välja arvatud:
print "Ma ei saa andmebaasiga ühendust luua"
tagasikülg
def create_table (tabel, df):
mootor = create_engine ('postgresql + psycopg2: // postgres: [meiliga kaitstud]: 5432 / õpetus')
df.to_sql (tabel, mootor, if_exists = "asenda")
def get_row (dt, ühendus):
cr = konn.kursor ()
päring = sql.SQL ("SELECT aapl close WHERE" Date "= '% s'"% dt)
kr.täitma (päring)
print kr.fetchall ()
def get_cols (dt, col1, col2, col3, ühendus):
cr = konn.kursor ()
päring = sql.SQL ("SELECT lähedalt WHERE" Date "= '% s'"% dt).vorming (
ruutmeetrit.SQL (',').liitu ([sql.Identifier (col1),
ruutmeetrit.Identifier (col2), sql.Identifier (col3)]))
kr.täitma (päring)
print kr.fetchall ()
def get_tab (tabel, col1, col2, col3, conn):
cr = konn.kursor ()
päring = sql.SQL ("SELECT 0 alates 1").vorming (
ruutmeetrit.SQL (',').liitu ([sql.Identifier (col1), sql.Identifier (col2),
ruutmeetrit.Identifier (col3)]), sql.Identifier (tabel))
kr.täitma (päring)
print kr.fetchall ()
def tutorial_run ():
conn = ühendama ()
sümbolid = ['SPY', 'AAPL', 'GOOG']
df = get_data (sümbolid, '2006-01-03', '2017-12-31')
create_table ("close", df)
get_row ("2017-12-29", konn)
get_cols ("2017-12-29", "aapl", "spioon", "goog", kontuur)
get_tab ("lähedal", "aapl", "spioon", "goog", ühendaja)
kui __nimi__ == "__main__":
tutorial_run ()

Viited

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

Viis parimat mängu püüdmise kaarti
Me kõik oleme YouTube'is voogesituse mänge näinud ja armastanud. PewDiePie, Jakesepticye ja Markiplier on vaid mõned tipptasemel mängijatest, kes on t...
Kuidas mängu Linuxis arendada
Kümme aastat tagasi ei osanud paljud Linuxi kasutajad ennustada, et nende lemmikoperatsioonisüsteem on ühel päeval populaarne kommertsvideomängude män...
Kommertsmängumootorite avatud lähtekoodiga sadamad
Tasuta, avatud lähtekoodiga ja platvormidevaheliste mängumootorite puhkusereise saab kasutada nii vanade kui ka mõnede üsna hiljutiste mängude pealkir...