Sobes.tech
Junior

Ի՞նչ եղանակներ գիտես տվյալների բազաների հետ աշխատելու համար։

sobes.tech AI

Պատասխան AI-ից

  • Ներքին մոդուլներ:
    sqlite3 - աշխատելու համար թեթև SDB SQLite-ով: հարմար է փոքր նախագծերի կամ օգտագործելու որպես ֆայլային տվյալների բազա հաճախորդի վրա:

    import sqlite3
    
    # Դատում տվյալների բազայի հետ (ստեղծում է ֆայլ, եթե չկա)
    conn = sqlite3.connect('mydatabase.db')
    cursor = conn.cursor()
    
    # Տեղադրել աղյուսակ
    cursor.execute('''
        CREATE TABLE IF NOT EXISTS users (
            id INTEGER PRIMARY KEY,
            name TEXT NOT NULL,
            age INTEGER
        )
    ''')
    
    # Տվյալների ներդնում
    cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ('Alice', 30))
    
    # Փաստացի փոփոխությունների հաստատում
    conn.commit()
    
    # Տվյալների ստացում
    cursor.execute("SELECT name, age FROM users")
    rows = cursor.fetchall()
    for row in rows:
        print(row)
    
    # Կապի փակում
    conn.close()
    
  • Python DB API (PEP-249):
    Ստանդարտ ինտերֆեյս, որը սահմանում է մեծամասնությունը արտաքին драйվերների տարբեր տվյալների բազաների համար (PostgreSQL, MySQL, Oracle և այլ): թույլ է տալիս գրել կոդ, որը կախված չէ կոնկրետ SDB-ից:

  • Մասնագիտացված драйվերներ/կոնեկտորներ:
    Գրադարաններ, որոնք իրականացնում են Python DB API կոնկրետ SDB-ների համար:

    • psycopg2 - PostgreSQL-ի համար:
    • mysql-connector-python կամ PyMySQL - MySQL-ի համար:
    • cx_Oracle - Oracle-ի համար:
    • pymssql - Microsoft SQL Server-ի համար:
    import psycopg2
    
    # Պայմանավորված PostgreSQL-ի հետ կապ
    try:
        conn = psycopg2.connect(
            host="localhost",
            database="mydatabase",
            user="myuser",
            password="mypassword"
        )
        cursor = conn.cursor()
    
        # SQL հարցում
        cursor.execute("SELECT * FROM products;")
        results = cursor.fetchall()
        for row in results:
            print(row)
    
        conn.close()
    except psycopg2.Error as e:
        print(f"Սխալ տվյալների բազային կապի ժամանակ: {e}")
    
  • ORM (Օբյեկտ-Ռելացիոնալ Մապինգ):
    Ֆրեյմվորկեր, որոնք թույլ են տալիս աշխատել տվյալների բազաների հետ օգտագործելով Python օբյեկտներ, ոչ թե SQL հարցումներ ուղղակիորեն: Դրանք հեշտացնում են տվյալների բազայի հետ փոխգործակցությունը, տրամադրում են աբստրակցիա, օգնում են խուսափել SQL-հակահեղինակներից:

    • SQLAlchemy - ամենաուժեղ և ճկուն ORM-ներից մեկը Python-ում: Պատրաստ է մի քանի SDB-ների աջակցությամբ, տրամադրում է ինչպես "Core" (աշխատելու SQL մակարդակով), այնպես էլ "ORM" (օբյեկտային մոտեցում):
    • Django ORM - Django-ի ներքին ORM, շատ հարմար է Django-ով վեբ հավելվածների կոնտեքստում տվյալների բազաների հետ աշխատելու համար:
    • Peewee - պարզ և թեթև ORM:

    Օրինակ SQLAlchemy Core-ով:

    from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select
    
    # Տվյալների բազայի հետ կապ (օրինակ, SQLite)
    engine = create_engine('sqlite:///mydatabase.db')
    
    # MetaData օբյեկտ՝ տվյալների բազայի մետադատվածների պահեստավորման համար
    metadata = MetaData()
    
    # Տեղեկատվական աղյուսակի սահմանում
    users_table = Table(
        'users',
        metadata,
        Column('id', Integer, primary_key=True),
        Column('name', String),
        Column('age', Integer)
    )
    
    # Աղյուսակի ստեղծում տվյալների բազայում (եթե չկա)
    metadata.create_all(engine)
    
    # Կապ հաստատում
    with engine.connect() as connection:
        # Տվյալների ներդնում
        connection.execute(
            users_table.insert().values(name='Bob', age=25)
        )
    
        # Տվյալների ընտրություն
        select_query = select(users_table)
        result = connection.execute(select_query)
    
        for row in result:
            print(row)
    

    Օրինակ SQLAlchemy ORM-ով:

    from sqlalchemy import create_engine, Column, Integer, String
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy.orm import sessionmaker
    
    # Տվյալների բազայի հետ կապ
    engine = create_engine('sqlite:///mydatabase_orm.db')
    
    # ORM մոդելների հիմնական դաս
    Base = declarative_base()
    
    # ORM մոդելի սահմանում
    class User(Base):
        __tablename__ = 'users_orm'
        id = Column(Integer, primary_key=True)
        name = Column(String)
        age = Column(Integer)
    
        def __repr__(self):
            return f"<User(name='{self.name}', age={self.age})>"
    
    # Աղյուսակի ստեղծում (եթե չկա)
    Base.metadata.create_all(engine)
    
    # Սեսիայի ֆաբրիկա
    Session = sessionmaker(bind=engine)
    session = Session()
    
    # Օբյեկտ ստեղծել և ավելացնել
    new_user = User(name='Charlie', age=40)
    session.add(new_user)
    
    # Լրացուցիչ հաստատում
    session.commit()
    
    # Օբյեկտ ստանալ
    user = session.query(User).filter_by(name='Charlie').first()
    print(user)
    
    # Սեսիա փակել
    session.close()
    
  • NoSQL տվյալների բազաներ:
    NoSQL տվյալների բազաների հետ աշխատելու համար օգտագործվում են մասնագիտացված գրադարաններ, օրինակ:

    • pymongo - MongoDB-ի համար:
    • redis - Redis-ի համար:
    • cassandra-driver - Cassandra-ի համար:

Ընտրությունը կախված է նախագծի պահանջներից, օգտագործվող SDB տեսակից, ORM-ի անհրաժեշտությունից և նախագծի բարդությունից: