ویژگی تصویر

اتصال پایتون به پایگاه داده PostgreSQL

  /  پایتون   /  اتصال پایتون به پایگاه داده 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”: کنترل کنید که نام کاربری و رمز عبور صحیح باشد.

آیا این مطلب برای شما مفید بود ؟

خیر
بله
موضوعات شما در انجمن: