کتابخانه psycopg2 در پایتون
نصب و راهاندازی کتابخانه psycopg2
برای استفاده از این کتابخانه، ابتدا باید آن را در محیط پایتون نصب کنید. بهترین روش نصب با استفاده از ابزار pip است:
pip install psycopg2در صورتی که در نصب نسخه اصلی خطا دریافت کردید (بهویژه در سیستمهای ویندوز)، میتوانید نسخه باینری را نصب کنید:
pip install psycopg2-binaryنسخه psycopg2-binary شامل تمامی وابستگیها است و معمولاً برای محیطهای توسعه مناسب است، اما در محیطهای تولید (production) پیشنهاد میشود از نسخه معمولی استفاده کنید تا کنترل بیشتری بر روی تنظیمات و بهینهسازیها داشته باشید.
نکته مهم:
- قبل از نصب، اطمینان حاصل کنید که PostgreSQL روی سیستم شما نصب و سرویس آن فعال است.
- دسترسی به اطلاعات کاربری پایگاه داده (host، database، user، password) برای برقراری اتصال ضروری است.
ایجاد اتصال به پایگاه داده PostgreSQL
برای برقراری ارتباط با پایگاه داده، از تابع connect() استفاده میشود. در مثال زیر نحوه ایجاد یک اتصال ساده را مشاهده میکنید:
import psycopg2
conn = psycopg2.connect(
host="localhost",
database="mydb",
user="myuser",
password="mypassword"
)
print("Connection successful!")
conn.close() در این قطعهکد، ابتدا با وارد کردن اطلاعات اتصال، به پایگاه داده متصل میشویم و در نهایت با conn.close() ارتباط را میبندیم تا منابع آزاد شوند. بسته شدن اتصال پس از پایان عملیات یکی از اصول مهم در برنامهنویسی پایگاه داده است.
اجرای دستورات SQL با psycopg2
برای اجرای دستورهای SQL باید از cursor استفاده کنیم. Cursor در واقع یک شیء موقتی است که عملیات خواندن و نوشتن روی پایگاه داده را انجام میدهد.
import psycopg2
conn = psycopg2.connect(
host="localhost",
database="mydb",
user="myuser",
password="mypassword"
)
cur = conn.cursor()
cur.execute("CREATE TABLE IF NOT EXISTS users (id SERIAL PRIMARY KEY, name VARCHAR(50), age INT)")
conn.commit()
cur.close()
conn.close() در این مثال، با استفاده از دستور execute() یک جدول جدید ایجاد میکنیم. سپس با commit() تغییرات را نهایی میکنیم. بدون فراخوانی commit()، تغییرات در پایگاه داده ذخیره نمیشوند.
درج داده در جدول (INSERT)
برای افزودن رکورد به جدول:
cur = conn.cursor()
cur.execute("INSERT INTO users (name, age) VALUES (%s, %s)", ("Ali", 25))
conn.commit()
cur.close()
استفاده از %s برای جلوگیری از حملات SQL Injection توصیه میشود. این روش باعث میشود مقادیر کاربر به صورت امن به دستور SQL اضافه شوند.
واچشی دادهها (SELECT)
برای خواندن اطلاعات از پایگاه داده از متدهای fetchone() و fetchall() استفاده میشود:
cur.execute("SELECT * FROM users")
rows = cur.fetchall()
for row in rows:
print(row)
در اینجا تمام ردیفهای جدول users دریافت و چاپ میشوند. اگر فقط به یک رکورد نیاز دارید، میتوانید از fetchone() استفاده کنید.
بهروزرسانی و حذف دادهها
برای تغییر یا حذف رکوردها از دستورهای UPDATE و DELETE استفاده میکنیم:
cur.execute("UPDATE users SET age = %s WHERE name = %s", (30, "Ali"))
conn.commit()
cur.execute("DELETE FROM users WHERE name = %s", ("Ali",))
conn.commit() در هر دو عملیات، مقدارها به صورت پارامتری ارسال میشوند تا امنیت افزایش یابد. فراموش نکنید پس از هر تغییر در داده، متد commit() را فراخوانی کنید.
استفاده از context manager برای مدیریت منابع
برای کدنویسی تمیزتر و ایمنتر میتوان از ساختار with استفاده کرد تا نیازی به بستن اتصال و cursor بهصورت دستی نباشد:
import psycopg2
with psycopg2.connect(
host="localhost",
database="mydb",
user="myuser",
password="mypassword"
) as conn:
with conn.cursor() as cur:
cur.execute("SELECT * FROM users")
print(cur.fetchall()) با استفاده از context manager، منابع پس از پایان بلوک with بهطور خودکار آزاد میشوند. این روش یکی از بهترین شیوههای کدنویسی در پایتون محسوب میشود.
مدیریت خطاها در psycopg2
کتابخانه psycopg2 شامل کلاس psycopg2.Error برای مدیریت استثناها است. با استفاده از try-except میتوان خطاهای اتصال یا اجرای SQL را مدیریت کرد:
import psycopg2
from psycopg2 import Error
try:
conn = psycopg2.connect(
host="localhost",
database="mydb",
user="myuser",
password="mypassword"
)
cur = conn.cursor()
cur.execute("SELECT * FROM users")
print(cur.fetchall())
except (Exception, Error) as e:
print("Error while connecting to PostgreSQL:", e)
finally:
if conn:
cur.close()
conn.close() در این مثال، اگر خطایی هنگام اتصال یا اجرای دستور رخ دهد، پیام خطا چاپ میشود و در نهایت ارتباط با پایگاه داده بسته میشود.
مزایا و معایب psycopg2
| مزایا | معایب |
|---|---|
| سریع و پایدار | نیاز به تنظیمات دستی در برخی سیستمعاملها |
| پشتیبانی از PostgreSQL features مانند JSONB و COPY | مناسب نبودن نسخه باینری برای محیط production |
| سازگاری بالا با پایتون 3 | عدم پشتیبانی از async به صورت پیشفرض |
مقایسه psycopg2 با کتابخانههای مشابه
| کتابخانه | ویژگیها | مناسب برای |
|---|---|---|
| psycopg2 | پایدار، سریع، رایجترین گزینه | کاربردهای عمومی و تجاری |
| asyncpg | پشتیبانی از async/await | برنامههای غیرهمزمان و با کارایی بالا |
| SQLAlchemy | ORM قدرتمند، انتزاع از SQL | پروژههای بزرگ با ساختار شیگرا |
بهترین روشها (Best Practices)
- همیشه از پارامترسازی برای جلوگیری از SQL Injection استفاده کنید.
- اتصالها را پس از اتمام کار ببندید یا از context manager بهره ببرید.
- در پروژههای بزرگ، از pooling برای مدیریت بهتر اتصالها استفاده کنید.
- در محیط production از نسخه غیرباینری (
psycopg2) استفاده کنید. - استثناها را با
try-except-finallyمدیریت کنید تا برنامه پایدار باقی بماند.
جمعبندی
کتابخانه psycopg2 یکی از قدرتمندترین ابزارهای کار با PostgreSQL در پایتون است. این کتابخانه امکاناتی نظیر اجرای مستقیم دستورات SQL، مدیریت تراکنشها، کار با دادههای JSON، و تعامل با دادههای بزرگ را بهصورت کارآمد فراهم میکند. اگرچه گزینههای جدیدتر مانند asyncpg برای عملیات غیرهمزمان وجود دارند، اما psycopg2 همچنان گزینهای مطمئن، پایدار و مورد اعتماد برای بیشتر برنامهنویسان پایتون است.
آیا این مطلب برای شما مفید بود ؟




