Python, PostgreSQL és Psycopg2 bemutató
Egy egyszerű szkripten túli alkalmazás fejlesztéséhez meg kell tartani a memórián kívüli adatokat egy adatbázisban. Számos lehetőség van az adatbázisra, de a PostgreSQL egy robusztus nyílt forráskódú platform, amely könnyen méretezhető a gyártásig.
A Python és a PostgreSQL összekapcsolhatók az erőteljes alkalmazások gyors fejlesztéséhez. A Psycopg egy PostgreSQL adapter, amely felhasználható a PostgreSQL felhasználására a Python alapú könyvtár segítségével. Ez az oktatóanyag bemutatja a Psycopg2 és néhány Python kód telepítését, hogy bemutassa annak használatát.
A Psycopg2 telepíthető az alábbi terminál pip paranccsal.
$ pip install psycopg2Telepítéskor az alábbi terminál kimenetet kell látnia.
A psycopg2 gyűjtéseA psycopg2-2 letöltése.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
Az összegyűjtött csomagok telepítése: psycopg2
A psycopg2-2 sikeresen telepítve.7.3.2
Bradleys-Mini: ~ BradleyPatton $
A Psycopg2 csomag importálásához a Python alkalmazásba használja az alábbi kódsort.
import psycopg2Annak érdekében, hogy az adatok betölthetők legyenek az adatbázisunkba, kölcsönvettem egy kódot egy korábbi, pandákról szóló oktatóanyagból. Az alábbi kód egy pandás DataFrame-et hoz létre történelmi adatokkal. Ezt felhasználva létrehoz egy táblázatot a PostgreSQL táblában.
def get_data (szimbólumok, start_date, end_date):panel = adatok.DataReader (szimbólumok, 'yahoo', start_date, end_date)
df = panel ['Bezárás]
df.oszlopok = térkép (str.alsó, df.oszlopok)
hd = lista (df)
nyomtatás df.fej()
nyomtatás hd
return df
Most beállítok néhány takarítási kódot, amelyet az oktatóanyag futtatásához használnak. Ezt a két módszert fogjuk használni az általunk létrehozott Psycopg2 módszerek hívására.
def tutorial_run ():szimbólumok = ['SPY', 'AAPL', 'GOOG']
df = get_data (szimbólumok, '2006-01-03', '2017-12-31')
ha __name__ == "__main__":
tutorial_run ()
A PostgreSQL adatbázishoz való csatlakozáshoz hozzá kell adnunk az alábbi módszert. A Try \ Except hibakezelést biztosít abban az esetben, ha a helyi adatbázis nem fut, vagy helytelen kapcsolati paramétereket adnak át az adatbázisnak. A Psycopg2 könyvtárban található connect módszer a kapcsolati karakterláncban átadott paraméterekkel csatlakozik az adatbázishoz. A dbname, a felhasználó és a jelszó paraméterei eltérhetnek. Ha a kapcsolat valamilyen oknál fogva meghiúsul, a hibaüzenet a konzolra kerül. Ez a módszer visszaadja a kapcsolati objektumot a hívási módszerünkhöz, ahol további adatbázis-műveletekhez használható.
def connect ():hátrányok = "dbname = 'tutorial' user =" postgres "host =" localhost "password =" password ""
próbáld ki:
conn = psycopg2.csatlakozás (hátrányok)
nyomtatás "csatlakoztatva"
kivéve:
print "Nem tudok csatlakozni az adatbázishoz"
visszakapcsolás
Miután létrehoztuk a kapcsolatot a PostgreSQL adatbázissal, betölthetjük adatainkat a get_data () metódusból az adatbázisunkba. A Psycopg2 és a pandák ezt nagyon egyszerű folyamatgá teszik.
Az első sor meghatározza azt a módszert, amelyet a pandáknak használniuk kell az adatbázishoz való csatlakozáshoz a DataFrame másolása érdekében. Ugyanazokat a paramétereket adja meg, mint a csatlakozási módszer. A második kódsor megtartja a DataFrame-et a PostgreSQL adatbázisba a to_sql () metódussal.
def create_table (tábla, df):motor = create_engine ('postgresql + psycopg2: // postgres: [e-mail védett]: 5432 / tutorial')
df.to_sql (tábla, motor, if_exists = 'csere')
A PostgreSQL pgAdmin terminálunk gyors áttekintése azt mutatja, hogy a kód sikeresen betöltötte a DataFrame-et a táblázat bezárására. Most, hogy van néhány adat betöltve az adatbázisunkba. A psycopg segítségével néhány lekérdezést futtathatunk az adatokon. Az alábbi módszer úgy van kialakítva, hogy felvegye az első módszerünkben létrehozott kapcsolatot, és futtasson egy lekérdezést a PostgreSQL adatbázisunkban. A 4 SQL objektum létrehozásához hozzá kell adnunk egy másik importálási utasítást.
psycopg2-ból import sqlDinamikus SQL parancsok létrehozásához a psycopg karakterlánc-formázással használja a változókat a karakterláncba a% s és a operátorok használatával.
A PostrgreSQL megkülönbözteti a kis- és nagybetűket. A get_data () metódusban az oszlopfejléceket kényszerítettük kisbetűsre. Az index nem szerepelt ebben az utasításban. Ahhoz, hogy a lekérdezésben továbbítsuk a nagybetűs „Data” oszlopfejlécet, dupla idézőjelben kell továbbítanunk a PostgreSQL számára. Ehhez egy sztringben a Pythonban el kell küldenie a „\” menekülési karaktert a dupla idézőjelek előtt.
Az alábbi python karakterlánc-formázási szintaxissal helyettesíthetjük a karakterlánc „% s” -ját. Ez a% s helyébe a dt dátum paramétert lépünk.
A létrehozott SQL lekérdezés végrehajtásához. Ezután át kell adnia a kurzornak .végrehajtani () metódus. A .fetchall () metódussal adja vissza a lekérdezés eredményeit. A konzolra nyomtatva megjelenítheti az eredményeket.
def get_row (dt, conn):cr = konn.kurzor()
lekérdezés = sql.SQL ("SELECT aapl közelről WHERE" Dátum "= '% s'"% dt)
kr.végrehajt (lekérdezés)
nyomtatás kr.fetchall ()
A függvény futtatásához hozzáadjuk az alábbi kódsort a tutorial_run () metódushoz. Az alábbihoz hasonló eredményeket kell kapnia.
get_row ("2017-12-29", bekötés)
A következő módszerben a karakterlánc formátumú módszereket használjuk arra, hogy több paramétert adjunk át a lekérdezésünkbe. Ez a lekérdezés dátumot és három oszlopot vesz igénybe. A (z)% s operátor használata mellett a (z) operátort felhasználjuk arra, hogy a karakterlánc-változókat egy karakterláncba kapcsolja, és beírja őket a lekérdezési karakterláncunkba. A lekérdezési karaktersorozat most az alábbi összekapcsolást használja egy „,” elválasztóval, hogy több oszlopnevet továbbítson a lekérdezésünkbe.
def get_cols (dt, col1, col2, col3, conn):cr = konn.kurzor()
lekérdezés = sql.SQL ("SELECT közelről WHERE" Dátum "= '% s'"% dt).formátum(
sql.SQL (',').csatlakozni ([sql.Azonosító (col1), sql.Azonosító (col2), sql.Azonosító (col3)]))
kr.végrehajt (lekérdezés)
nyomtatás kr.fetchall ()
Az új módszer használatához hozzáadom az alábbi sort a tutorial_run () metódusunkhoz. Az eredményeket alább kell látnia.
get_cols ("2017-12-29", "aapl", "kém", "goog", összekötő)
A következő módszer, amelyet írunk, két karakterlánc-helyettesítést használ a táblázatunk összes adatának lekérésére, az indexünk kivételével. Ez a módszer az előző módszerünkre épít, hozzáadva egy második „1” zárójeles jelölést. Ezúttal a zárójeleket úgy számozzuk meg, hogy azokat a sorrend formátumának fogalmakódjába cseréljük. Új módszerünk a három oszlopparamétert vesszővel elválasztja. Ezenkívül a formázási módszer második paramétere a tábla változó. A lekérdezési karaktersorozatot ezután úgy állítják össze, hogy a zárójeleket a formázási módszer paramétereivel helyettesítik. Ez: 0 = oszlopok és 1 = táblázat neve.
def get_tab (tábla, col1, col2, col3, conn):cr = konn.kurzor()
lekérdezés = sql.SQL ("SELECT 0 from 1").formátum(
sql.SQL (',').csatlakozni ([sql.Azonosító (col1), sql.Azonosító (col2),
sql.Azonosító (col3)]), sql.Azonosító (táblázat))
kr.végrehajt (lekérdezés)
nyomtatás kr.fetchall ()
Az új módszer használatához hozzáadom az alábbi sort a tutorial_run () módszerünkhöz. Az eredményeket alább kell látnia.
get_tab ("close", "aapl", "spy", "goog", conn)
Sokkal több módszer fedezhető fel a psycopg könyvtárban. Ezzel el kell kezdeni a psycopg funkcióinak megfelelő megértését. Az alábbiakban további forrásokat biztosítottam a dokumentációs oldalakon, amelyek lehetővé teszik a könyvtár szélesebb körű felfedezését.
Teljes kód
import psycopg2a psycopg2-ból import sql
importálja a pandas_datareader adatot
def get_data (szimbólumok, start_date, end_date):
panel = adatok.DataReader (szimbólumok, 'yahoo', start_date, end_date)
df = panel ['Bezárás]
df.oszlopok = térkép (str.alsó, df.oszlopok)
hd = lista (df)
nyomtatás df.fej()
nyomtatás hd
return df
def connect ():
hátrányok = "dbname = 'tutorial' user =" postgres "host =" localhost "password =" password ""
próbáld ki:
conn = psycopg2.csatlakozás (hátrányok)
nyomtatás "csatlakoztatva"
kivéve:
print "Nem tudok csatlakozni az adatbázishoz"
visszakapcsolás
def create_table (tábla, df):
motor = create_engine ('postgresql + psycopg2: // postgres: [e-mail védett]: 5432 / tutorial')
df.to_sql (tábla, motor, if_exists = "csere")
def get_row (dt, conn):
cr = konn.kurzor()
lekérdezés = sql.SQL ("SELECT aapl közelről WHERE" Dátum "= '% s'"% dt)
kr.végrehajt (lekérdezés)
nyomtatás kr.fetchall ()
def get_cols (dt, col1, col2, col3, conn):
cr = konn.kurzor()
lekérdezés = sql.SQL ("SELECT közelről WHERE" Dátum "= '% s'"% dt).formátum(
sql.SQL (',').csatlakozni ([sql.Azonosító (col1),
sql.Azonosító (col2), sql.Azonosító (col3)]))
kr.végrehajt (lekérdezés)
nyomtatás kr.fetchall ()
def get_tab (tábla, col1, col2, col3, conn):
cr = konn.kurzor()
lekérdezés = sql.SQL ("SELECT 0 from 1").formátum(
sql.SQL (',').csatlakozni ([sql.Azonosító (col1), sql.Azonosító (col2),
sql.Azonosító (col3)]), sql.Azonosító (táblázat))
kr.végrehajt (lekérdezés)
nyomtatás kr.fetchall ()
def tutorial_run ():
conn = connect ()
szimbólumok = ['SPY', 'AAPL', 'GOOG']
df = get_data (szimbólumok, '2006-01-03', '2017-12-31')
create_table ("bezárás", df)
get_row ("2017-12-29", bekötés)
get_cols ("2017-12-29", "aapl", "kém", "goog", összekötő)
get_tab ("close", "aapl", "spy", "goog", conn)
ha __name__ == "__main__":
tutorial_run ()
Hivatkozások
initd.org / psycopg
initd.org / psycopg / docs / install.html
http: // initd.org / psycopg / docs / sql.html
wiki.postgresql.org / wiki / Psycopg2_Tutorial