Psycopg adalah adaptor database PostgreSQL yang dioptimalkan untuk bahasa pemrograman Python. Anda dapat mengakses Hologres menggunakan Psycopg karena Hologres kompatibel dengan PostgreSQL 11. Topik ini menjelaskan cara mengakses Hologres menggunakan Psycopg 3.
Prasyarat
Pastikan Python 3.7 atau versi lebih baru telah diinstal.
Instal Psycopg 3
Jalankan perintah berikut untuk menginstal Psycopg 3:
pip install --upgrade pip # Tingkatkan pip ke versi 20.3 atau lebih baru.
pip install "psycopg[binary]"
Hubungkan ke Hologres
Setelah Psycopg 3 terinstal, Anda dapat melakukan langkah-langkah berikut untuk terhubung ke Hologres.
Muat Psycopg 3.
Jalankan perintah berikut untuk memuat Psycopg 3 yang telah diinstal:
import psycopgBuat koneksi database.
Gunakan fungsi
psycopg.connect()untuk terhubung ke Hologres. Kode berikut menunjukkan sintaksis dan parameter:conn = psycopg.connect( host="<Endpoint>", port=<Port>, dbname="<databases>", user="<Access ID>", password="<Access Key>", keepalives=<keepalives>, keepalives_idle=<keepalives_idle>, keepalives_interval=<keepalives_interval>, keepalives_count=<keepalives_count> )Parameter
Deskripsi
Endpoint
Titik akhir dan nomor port dari instance Hologres.
Masuk ke Konsol Hologres. Di panel navigasi sebelah kiri, klik Instances. Pada halaman Instances, klik ID instance tersebut. Pada halaman Instance Details, lihat titik akhir dan nomor port di bagian Network Information.
PentingPilih titik akhir dan nomor port yang benar berdasarkan lingkungan jaringan tempat kode dijalankan. Jika tidak, koneksi akan gagal.
Port
databases
Nama database Hologres.
Access ID
ID AccessKey dari akun Alibaba Cloud yang digunakan untuk terhubung ke instance Hologres.
Anda dapat pergi ke halaman AccessKey untuk mendapatkan ID AccessKey.
Access Key
Rahasia AccessKey dari akun Alibaba Cloud yang digunakan untuk terhubung ke instance Hologres.
keepalives
Opsional. Metode koneksi. Kami sarankan Anda mengonfigurasi parameter ini. Nilai yang valid:
1: menggunakan koneksi persisten.
0: menggunakan koneksi non-persisten.
keepalives_idle
Interval pengiriman pesan keepalive ketika koneksi ke database Hologres masuk ke status idle. Unit: detik.
keepalives_interval
Interval pengiriman ulang pesan keepalive jika tidak ada respons yang diterima. Unit: detik.
keepalives_count
Jumlah maksimum pengiriman pesan keepalive.
Contoh:
conn = psycopg.connect( host="<Endpoint>", port=<Port>, dbname="<databases>", user="<Access ID>", password="<Access Key>", keepalives=1, # Pertahankan koneksi. keepalives_idle=130, # Kirim pesan keepalive setiap 130 detik saat koneksi idle. keepalives_interval=10, # Tunggu 10 detik sebelum mengirim ulang pesan keepalive jika tidak ada respons yang diterima. keepalives_count=15, # Kirim pesan keepalive hingga 15 kali. application_name="<Application Name>" )CatatanMengonfigurasi parameter Application Name membantu Anda melihat aplikasi yang memulai permintaan dalam daftar query lambat historis.
Gunakan Hologres
Setelah terhubung ke database Hologres, Anda dapat melakukan operasi pengembangan data menggunakan Psycopg 3. Langkah-langkah berikut mencakup pembuatan tabel, penyisipan data, penanyaan data, dan pelepasan sumber daya. Jika ingin menggunakan fitur rencana tetap untuk meningkatkan performa baca dan tulis, konfigurasikan parameter GUC terkait. Untuk informasi lebih lanjut, lihat Percepat eksekusi pernyataan SQL dengan menggunakan rencana tetap.
Buat kursor.
Sebelum melakukan operasi pengembangan data, jalankan perintah
cur = conn.cursor()untuk membuat kursor untuk koneksi tersebut.Lakukan operasi pengembangan data.
Buat tabel.
Jalankan perintah berikut untuk membuat tabel bernama
holo_testdan tentukan tipe data tabel sebagai integer. Anda dapat menyesuaikan nama tabel dan tipe data sesuai dengan kebutuhan bisnis Anda.cur.execute("CREATE TABLE holo_test (num integer);")Sisipkan data ke dalam tabel.
Jalankan perintah berikut untuk menyisipkan data dari 1 hingga 1.000 ke dalam tabel
holo_testyang telah dibuat.cur.execute("INSERT INTO holo_test SELECT generate_series(%s, %s)", (1, 1000))Tanyakan data dari tabel.
cur.execute("SELECT sum(num) FROM holo_test;") cur.fetchone()
Commit transaksi.
Contoh sebelumnya melibatkan operasi DDL, DML, dan DQL. Jalankan perintah
conn.commit()setelah setiap pernyataan SQL untuk commit transaksi dan memastikan bahwa operasi dicommit. Kami sarankan Anda mengatur parameter autocommit menjadi true setelah kode koneksiconnuntuk secara otomatis commit perintah SQL. Kode berikut memberikan contoh:Contoh panggilan sinkron
conn = psycopg.connect( host="<Endpoint>", port=<Port>, dbname="<databases>", user="<Access ID>", password="<Access Key>", keepalives=1, # Pertahankan koneksi. keepalives_idle=130, # Kirim pesan keepalive setiap 130 detik saat koneksi idle. keepalives_interval=10, # Tunggu 10 detik sebelum mengirim ulang pesan keepalive jika tidak ada respons yang diterima. keepalives_count=15, # Kirim pesan keepalive hingga 15 kali. application_name="<Application Name>" ) conn.autocommit = "True"Contoh panggilan asinkron
async with await psycopg.AsyncConnection.connect( host="<Endpoint>", port=<Port>, dbname="<databases>", user="<Access ID>", password="<Access Key>", application_name="<Application Name>", autocommit = "True" ) as aconn: async with aconn.cursor() as acur: await acur.execute( "INSERT INTO test (num, data) VALUES (%s, %s)", (100, "abc'def")) await acur.execute("SELECT * FROM test") await acur.fetchone() # akan mengembalikan (1, 100, "abc'def") async for record in acur: print(record)
Lepaskan sumber daya.
Untuk memastikan operasi selanjutnya tidak terpengaruh, setelah operasi selesai, jalankan perintah berikut untuk menutup kursor dan memutuskan Psycopg 3 dari database Hologres Anda:
cur.close() conn.close()
Praktik terbaik untuk impor DataFrames ke Hologres secara efisien
Ketika menggunakan Python, umumnya Pandas digunakan untuk mengonversi entri data menjadi DataFrame, memproses DataFrame, dan kemudian mengimpor DataFrame ke Hologres. Dalam situasi ini, Anda mungkin ingin menyelesaikan impor dengan cepat.
# pip install Pandas==1.5.1Kami sarankan menggunakan mode COPY untuk impor data. Kode Python berikut memberikan contoh:
import psycopg
import pandas as pd
# Hubungkan ke Hologres.
conn = psycopg.connect(
host="hgpostcn-cn-xxxxx-cn-hangzhou.hologres.aliyuncs.com",
port=80,
dbname="db",
user="xxx",
password="xxx",
application_name="psycopg3"
)
cur = conn.cursor()
# Hapus tabel yang berlebihan.
cur.execute("""
DROP TABLE IF EXISTS df_data;
""")
conn.commit()
# Buat tabel uji untuk impor data.
cur.execute("""
CREATE TABLE IF NOT EXISTS df_data(
col1 int,
col2 int,
col3 int,
primary key(col1)
);
""")
conn.commit()
# Bangun DataFrame.
data = [('1','1','1'),('2','2','2')]
cols = ('col1','col2','col3')
pd_data = pd.DataFrame(data, columns=cols)
# Tulis data dalam batch.
# Gunakan StringIO untuk mengonversi DataFrame menjadi string format CSV.
from io import StringIO
# Buat buffer.
buffer = StringIO()
# Tulis DataFrame ke buffer dalam format CSV.
pd_data.to_csv(buffer, index=False, header=False)
# Atur ulang posisi buffer ke awal.
buffer.seek(0)
with cur.copy("COPY df_data(col1,col2,col3) FROM STDIN WITH (STREAM_MODE TRUE,ON_CONFLICT UPDATE,FORMAT CSV);") as copy:
while data := buffer.read(1024):
copy.write(data)
conn.commit()
# Tanyakan data.
cur.execute("SELECT * FROM df_data")
cur.fetchone()
cur.commit()Lihat query historis untuk memverifikasi bahwa data telah diimpor ke Hologres menggunakan mode COPY.