Psikopg2

Tutorial Psycopg2

Tutorial Psycopg2

Tutorial Python, PostgreSQL dan Psycopg2

Untuk mengembangkan aplikasi di luar skrip sederhana, perlu menyimpan data di luar memori ke dalam pangkalan data.  Terdapat banyak kemungkinan pilihan untuk pangkalan data, tetapi PostgreSQL adalah platform sumber terbuka yang kuat yang dapat dengan mudah mencapai pengeluaran.

Python dan PostgreSQL dapat dihubungkan untuk mengembangkan aplikasi yang kuat dengan cepat.  Psycopg adalah penyesuai PostgreSQL yang dapat digunakan untuk memanfaatkan PostgreSQL melalui perpustakaan berasaskan Python.  Tutorial ini akan melalui pemasangan Psycopg2 dan beberapa kod Python untuk menunjukkan penggunaannya.

Anda boleh memasang Psycopg2 melalui arahan pip terminal di bawah.

$ pip pasang psycopg2

Semasa memasang, anda akan melihat output terminal di bawah.

Mengumpul psycopg2
Memuat turun 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.sementara (1.7MB)
100% | ████████████████████████████████ | 1.7MB 397kB / s
Memasang pakej yang dikumpulkan: psycopg2
Psycopg2-2 berjaya dipasang.7.3.2
Bradleys-Mini: ~ BradleyPatton $

Untuk mengimport pakej Psycopg2 ke dalam aplikasi Python anda, gunakan baris kod di bawah.

import psycopg2

Untuk memasukkan beberapa data ke dalam pangkalan data kami, saya telah meminjam beberapa kod dari tutorial sebelumnya mengenai panda. Kod di bawah ini akan membuat DataFrame panda dengan data sejarah.  Ini kemudian akan dimanfaatkan untuk membuat jadual dalam jadual PostgreSQL.

def get_data (simbol, tarikh mula, tarikh_ akhir):
panel = data.Pembaca Data (simbol, 'yahoo', tarikh mula, tarikh_ akhir)
df = panel ['Tutup']
df.lajur = peta (str.lebih rendah, df.lajur)
hd = senarai (df)
cetak df.kepala ()
cetak hd
kembali df

Saya sekarang akan menyediakan beberapa kod pengemasan yang digunakan untuk menjalankan tutorial. Kedua kaedah ini akan digunakan untuk memanggil kaedah Psycopg2 yang kami buat.

def tutorial_run ():
simbol = ['SPY', 'AAPL', 'GOOG']
df = get_data (simbol, '2006-01-03', '2017-12-31')
jika __nama__ == "__main__":
tutorial_jalankan ()

Untuk menyambung ke pangkalan data PostgreSQL, kita perlu menambahkan kaedah di bawah. Cuba \ Kecuali memberikan beberapa pengendalian ralat sekiranya pangkalan data tempatan tidak berjalan, atau parameter sambungan yang salah diteruskan ke pangkalan data. Kaedah penyambungan di perpustakaan Psycopg2 menghubungkan ke pangkalan data dengan parameter yang dilalui dalam rentetan sambungan. Parameter anda untuk dbname, user, dan password mungkin berbeza. Sekiranya sambungan gagal kerana sebab tertentu, mesej ralat akan ditulis ke konsol. Kaedah ini mengembalikan objek sambungan kembali ke kaedah panggilan kami di mana ia dapat digunakan untuk operasi pangkalan data selanjutnya.

def connect ():
kontra = "dbname = 'tutorial' user =" postgres "host =" localhost "kata laluan =" kata laluan ""
cuba:
samb = psycopg2.sambung (kontra)
cetak "Bersambung"
kecuali:
cetak "Saya tidak dapat menyambung ke pangkalan data"
pulangan samb

Setelah kami membuat sambungan ke pangkalan data PostgreSQL, kami dapat memuat data kami dari kaedah get_data () ke dalam pangkalan data kami. Psycopg2 dan panda menjadikan ini proses yang sangat mudah.

Baris pertama menentukan kaedah yang harus digunakan panda untuk menyambung ke pangkalan data untuk menyalin DataFrame. Anda akan memberikan parameter yang sama dengan kaedah sambungan anda. Baris kedua kod berterusan DataFrame ke pangkalan data PostgreSQL dengan kaedah to_sql ().

def create_table (jadual, df):
engine = create_engine ('postgresql + psycopg2: // postgres: [dilindungi e-mel]: 5432 / tutorial')
df.to_sql (jadual, mesin, if_exists = 'ganti')

Tinjauan cepat di terminal PostgreSQL pgAdmin kami menunjukkan bahawa kod berjaya memuatkan DataFrame ke dalam jadual "tutup". Sekarang kami mempunyai beberapa data yang dimuat ke dalam pangkalan data kami. Kita boleh menggunakan psycopg untuk menjalankan beberapa pertanyaan mengenai data. Kaedah di bawah ini dibina untuk mengambil sambungan yang dibuat dalam kaedah pertama kami dan menjalankan pertanyaan pada pangkalan data PostgreSQL kami. Untuk membuat 4 objek SQL kita perlu menambah pernyataan import yang lain.

dari psycopg2 import sql

Untuk membuat perintah SQL dinamik, psycopg menggunakan pemformatan rentetan untuk mengisi pemboleh ubah ke dalam rentetan menggunakan operator% s dan .

PostrgreSQL peka huruf besar kecil. Dalam kaedah get_data () kami memaksa tajuk lajur kami untuk huruf kecil. Indeks tidak termasuk dalam arahan ini. Untuk meneruskan tajuk kolum "Data" dalam pertanyaan, kita perlu meneruskannya ke PostgreSQL dalam tanda petik. Untuk melakukan ini dalam rentetan di Python, anda perlu menghantar watak pelarian "\" sebelum petikan berganda.

Kita boleh mengganti “% s” dalam rentetan menggunakan sintaks pemformatan rentetan python di bawah. Ini menggantikan% s dengan parameter tarikh kami dt.

Untuk melaksanakan pertanyaan SQL yang dibuat. Anda kemudian perlu menyebarkannya ke kursor .laksanakan kaedah (). Dengan memanggil .kaedah fetchall (), anda mengembalikan hasil pertanyaan. Apabila dicetak ke konsol, anda dapat memaparkan hasilnya.

def get_row (dt, samb):
cr = samb.kursor ()
pertanyaan = sql.SQL (""PILIH aapl dari tutup DI MANA"" Tarikh ""= '% s'""% dt)
cr.laksanakan (pertanyaan)
cetak cr.fetchall ()

Untuk menjalankan fungsi ini kita tambahkan baris kod di bawah ke kaedah tutorial_run (). Anda mesti mendapat keputusan yang serupa dengan yang berikut.

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

Dalam kaedah berikutnya, kami akan menggunakan kaedah format rentetan untuk memasukkan beberapa parameter ke dalam pertanyaan kami. Pertanyaan ini akan mengambil tarikh dan tiga lajur. Sebagai tambahan untuk menggunakan operator% s, kami akan menggunakan operator untuk menggabungkan pemboleh ubah rentetan ke dalam string dan memasukkannya ke dalam string pertanyaan kami. Rentetan pertanyaan kami kini menggunakan gabungan di bawah ini dengan pemisah “,” untuk meneruskan beberapa nama lajur ke dalam pertanyaan kami.

def get_cols (dt, col1, col2, col3, samb):
cr = samb.kursor ()
pertanyaan = sql.SQL (""PILIH dari tutup DI MANA"" Tarikh ""= '% s'""% dt).format (
sql.SQL (',').sertai ([sql.Pengecam (col1), sql.Pengecam (col2), sql.Pengecam (col3)]))
cr.laksanakan (pertanyaan)
cetak cr.fetchall ()

Untuk menggunakan kaedah baru kami, saya akan menambahkan baris di bawah untuk kaedah tutorial_run () kami. Anda mesti melihat hasilnya di bawah.

get_cols (""2017-12-29"", ""aapl"", ""mata-mata"", ""goog"", samb)

Kaedah seterusnya yang kami tulis akan menggunakan dua penggantian tali untuk menarik semua data dalam jadual kami kecuali indeks kami. Kaedah ini menggunakan kaedah sebelumnya dengan menambahkan notasi kurungan pengganti kedua ""1"". Kali ini tanda kurung diberi nombor sehingga diganti dalam kod tanggapan format pesanan. Kaedah baru kami bergabung dengan parameter tiga lajur dengan pemisah koma. Sebagai tambahan, parameter kedua dalam metode format adalah pemboleh ubah jadual. Rentetan pertanyaan kemudian dibina dengan menggantikan tanda kurung dengan parameter dalam kaedah format mengikut urutan. Itu adalah 0 = lajur dan 1 = nama jadual.

def get_tab (jadual, col1, col2, col3, samb):
cr = samb.kursor ()
pertanyaan = sql.SQL (""PILIH 0 dari 1"").format (
sql.SQL (',').sertai ([sql.Pengecam (col1), sql.Pengecam (col2),
sql.Pengecam (col3)]), sql.Pengecam (jadual))
cr.laksanakan (pertanyaan)
cetak cr.fetchall ()

Untuk menggunakan kaedah baru kami, saya akan menambahkan baris di bawah untuk kaedah tutorial_run () kami. Anda mesti melihat hasilnya di bawah.

get_tab (""tutup"", ""aapl"", ""mata-mata"", ""goog"", samb)

Terdapat banyak lagi kaedah untuk diterokai di perpustakaan psycopg. Ini akan menjadikan anda bermula dengan pemahaman yang baik mengenai fungsi psycopg. Saya telah memberikan beberapa sumber lagi di halaman dokumentasi yang akan membolehkan anda meneroka perpustakaan dengan lebih meluas.

Kod Penuh

import psycopg2
dari psycopg2 import sql
import pandas_datareader sebagai data
def get_data (simbol, tarikh mula, tarikh_ akhir):
panel = data.Pembaca Data (simbol, 'yahoo', tarikh mula, tarikh_ akhir)
df = panel ['Tutup']
df.lajur = peta (str.lebih rendah, df.lajur)
hd = senarai (df)
cetak df.kepala ()
cetak hd
kembali df
def connect ():
kontra = ""dbname = 'tutorial' user ="" postgres ""host ="" localhost ""kata laluan ="" kata laluan """"
cuba:
samb = psycopg2.sambung (kontra)
cetak ""Bersambung""
kecuali:
cetak ""Saya tidak dapat menyambung ke pangkalan data""
pulangan samb
def create_table (jadual, df):
engine = create_engine ('postgresql + psycopg2: // postgres: [dilindungi e-mel]: 5432 / tutorial')
df.to_sql (jadual, mesin, if_exists = ""ganti"")
def get_row (dt, samb):
cr = samb.kursor ()
pertanyaan = sql.SQL (""PILIH aapl dari tutup DI MANA"" Tarikh ""= '% s'""% dt)
cr.laksanakan (pertanyaan)
cetak cr.fetchall ()
def get_cols (dt, col1, col2, col3, samb):
cr = samb.kursor ()
pertanyaan = sql.SQL (""PILIH dari tutup DI MANA"" Tarikh ""= '% s'""% dt).format (
sql.SQL (',').sertai ([sql.Pengecam (col1),
sql.Pengecam (col2), sql.Pengecam (col3)]))
cr.laksanakan (pertanyaan)
cetak cr.fetchall ()
def get_tab (jadual, col1, col2, col3, samb):
cr = samb.kursor ()
pertanyaan = sql.SQL (""PILIH 0 dari 1"").format (
sql.SQL (',').sertai ([sql.Pengecam (col1), sql.Pengecam (col2),
sql.Pengecam (col3)]), sql.Pengecam (jadual))
cr.laksanakan (pertanyaan)
cetak cr.fetchall ()
def tutorial_run ():
samb = sambung ()
simbol = ['SPY', 'AAPL', 'GOOG']
df = get_data (simbol, '2006-01-03', '2017-12-31')
create_table (""tutup"", df)
get_row (""2017-12-29"", samb)
get_cols (""2017-12-29"", ""aapl"", ""mata-mata"", ""goog"", samb)
get_tab (""tutup"", ""aapl"", ""mata-mata"", ""goog"", samb)
jika __nama__ == ""__main__"":
tutorial_jalankan ()

Rujukan

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

Vulkan untuk Pengguna Linux
Dengan setiap kad grafik generasi baru, kami melihat pembangun permainan mendorong had kesetiaan grafik dan semakin dekat dengan fotorealisme. Tetapi ...
OpenTTD vs Simutrans
Membuat simulasi pengangkutan anda sendiri boleh menyeronokkan, santai dan sangat menarik. Itulah sebabnya anda perlu memastikan bahawa anda mencuba s...
Tutorial OpenTTD
OpenTTD adalah salah satu permainan simulasi perniagaan yang paling popular di luar sana. Dalam permainan ini, anda perlu membuat perniagaan pengangku...