اتصال پایتون به پایگاه داده PostgreSQL
برای اتصال به پایگاه داده PostgreSQL در زبان برنامهنویسی پایتون، باید از یک کتابخانه مناسب استفاده کنید. پایتون برای کار با پایگاه دادههای مختلف، یک کتابخانه استاندارد به نام psycopg2 فراهم کرده است که میتواند با PostgreSQL ارتباط برقرار کند. در ادامه، نحوه اتصال و استفاده از این کتابخانه به صورت کامل و با نمونههای کاربردی آمده است.
نحوه نصب psycopg2
قبل از استفاده از کتابخانه psycopg2، باید آن را نصب کنید. برای این منظور میتوانید از دستور زیر در ترمینال استفاده کنید:
pip install psycopg2
در صورتی که با مشکل اتصال به پایگاه داده مواجه شدید، میتوانید از نسخه کاملتر psycopg2-binary نیز استفاده کنید:
pip install psycopg2-binary
اتصال به پایگاه داده PostgreSQL
برای اتصال به پایگاه داده PostgreSQL در پایتون، ابتدا باید اطلاعات اتصال مانند نام کاربری، رمز عبور، نام پایگاه داده و IP سرور را تعیین کنید. سپس با استفاده از کتابخانه psycopg2، یک اتصال ایجاد میکنیم.
import psycopg2
# اطلاعات اتصال
host = "localhost"
database = "mydb"
user = "postgres"
password = "mypassword"
try:
# ایجاد اتصال به پایگاه داده
connection = psycopg2.connect(
host=host,
database=database,
user=user,
password=password
)
print("اتصال موفق به پایگاه داده PostgreSQL")
except Exception as error:
print(f"خطا در اتصال به پایگاه داده: {error}")
در کد بالا، ما یک اتصال با استفاده از psycopg2.connect ایجاد کردهایم. این تابع اطلاعات اتصال را دریافت میکند و در صورت موفقیت، یک شیء اتصال را برمیگرداند. در صورت خطا، یک استثنا ایجاد میشود که با except مدیریت میشود.
اجرای دستورات SQL
پس از اتصال، میتوانید با استفاده از شیء cursor دستورات SQL را اجرا کنید. در زیر نمونهای از چگونگی اجرای یک دستور SELECT آمده است:
cursor = connection.cursor()
# اجرای دستور SELECT
cursor.execute("SELECT version();")
record = cursor.fetchone()
print("نسخه PostgreSQL:", record)
# بستن cursor و اتصال
cursor.close()
connection.close()
در این کد، ما از cursor.execute() برای اجرای دستور SQL استفاده کردهایم. دستور fetchone() برای دریافت یک رکورد از خروجی دستور اجرا شده استفاده میشود. در پایان، cursor و اتصال را با استفاده از close() بستهایم.
نمونه کاربرد: ذخیره و بازیابی دادهها
در این قسمت، یک نمونه کامل از چگونگی ذخیره و بازیابی داده در PostgreSQL با استفاده از پایتون آمده است:
import psycopg2
def insert_user(name, email):
try:
connection = psycopg2.connect(
host="localhost",
database="mydb",
user="postgres",
password="mypassword"
)
cursor = connection.cursor()
# دستور INSERT
insert_query = """INSERT INTO users (name, email) VALUES (%s, %s)"""
record_to_insert = (name, email)
cursor.execute(insert_query, record_to_insert)
connection.commit()
print("رکورد با موفقیت اضافه شد.")
except Exception as error:
print(f"خطا در ذخیرهسازی: {error}")
finally:
if cursor:
cursor.close()
if connection:
connection.close()
def fetch_users():
try:
connection = psycopg2.connect(
host="localhost",
database="mydb",
user="postgres",
password="mypassword"
)
cursor = connection.cursor()
# دستور SELECT
select_query = "SELECT * FROM users;"
cursor.execute(select_query)
records = cursor.fetchall()
for row in records:
print(f"ID: {row[0]}, نام: {row[1]}, ایمیل: {row[2]}")
except Exception as error:
print(f"خطا در بازیابی دادهها: {error}")
finally:
if cursor:
cursor.close()
if connection:
connection.close()
# مثال فراخوانی توابع
insert_user("علی", "ali@example.com")
fetch_users()
در این کد، دو تابع به نام insert_user و fetch_users تعریف شدهاند. اولی برای ذخیره کردن داده در جدول users و دومی برای بازیابی دادهها استفاده میشود. از %s در دستورات SQL برای پارامترهای ورودی استفاده شده است که به دلیل امنیت، نسبت به حمله SQL Injection محافظت میکند.
استانداردهای بهتر در مدیریت اتصالات
برای مدیریت بهتر اتصالات و پیشگیری از ریزش اتصال، باید از try...finally استفاده کنید. همچنین میتوانید از contextlib برای مدیریت منابع بهتر استفاده کنید.
در زیر نمونهای با استفاده از contextlib آمده است:
from contextlib import contextmanager
import psycopg2
@contextmanager
def get_db_connection():
connection = None
try:
connection = psycopg2.connect(
host="localhost",
database="mydb",
user="postgres",
password="mypassword"
)
yield connection
except Exception as error:
print(f"خطا در اتصال: {error}")
finally:
if connection:
connection.close()
# استفاده از context manager
with get_db_connection() as conn:
cursor = conn.cursor()
cursor.execute("SELECT * FROM users;")
records = cursor.fetchall()
for row in records:
print(row)
این روش باعث میشود که اتصال به صورت خودکار بسته شود و دادهها به درستی مدیریت شوند.
مقایسه psycopg2 و psycopg2-binary
در زیر جدولی از مزایا و معایب این دو نسخه آمده است:
| نام کتابخانه | مزایا | معایب |
|---|---|---|
| psycopg2 | نصب پایدارتر، مناسب برای محیطهای تولید | نیاز به کامپایل کتابخانههای سیستمی |
| psycopg2-binary | نصب آسان، مناسب برای توسعه | قابلیت استفاده در محیط تولید محدود |
خطاهای رایج و راهحلها
- خطا: “could not connect to server”: اطمینان حاصل کنید که PostgreSQL در حال اجراست و پورت در دسترس است.
- خطا: “database does not exist”: مطمئن شوید نام پایگاه داده صحیح است و پایگاه داده در سرور وجود دارد.
- خطا: “password authentication failed”: کنترل کنید که نام کاربری و رمز عبور صحیح باشد.
آیا این مطلب برای شما مفید بود ؟




