Erstellen Sie ein Datenbankschema mit SQLAlchemy

Es wurde viel gesagt, dass SQLAlchemy eine der beliebtesten Bibliotheken zum Erstellen von Datenbankschemata ist. Heute sehen wir uns ein einfaches Beispiel für die Erstellung eines kleinen Datenschemas für eine Angebotssuchanwendung an. Wir werden PostgreSQL als DBMS verwenden.





Wir werden einen deklarativen Ansatz zur Definition von Modellen verwenden, da dieser meiner Meinung nach einfacher und klarer ist als der klassische Ansatz, der auf Mapper basiert. Skizzieren wir zunächst das Er-Diagramm.





, , , .





SQLAlchemy . Quote relationship.





from sqlalchemy import Column, ForeignKey, Integer, String, Text, Date, DateTime
from sqlalchemy.orm import relationship
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()


class Topic(Base):

    __tablename__ = 'topic'
    __tableargs__ = {
        'comment': ' '
    }

    topic_id = Column(
        Integer,
        nullable=False,
        unique=True,
        primary_key=True,
        autoincrement=True
    )
    name = Column(String(128), comment=' ')
    description = Column(Text, comment=' ')

    def __repr__(self):
        return f'{self.topic_id} {self.name} {self.description}'


class Author(Base):

    __tablename__ = 'author'
    __tableargs__ = {
        'comment': ' '
    }

    author_id = Column(
        Integer,
        nullable=False,
        unique=True,
        primary_key=True,
        autoincrement=True
    )
    name = Column(String(128), comment=' ')
    birth_date = Column(Date, comment='  ')
    country = Column(String(128), comment='  ')

    def __repr__(self):
        return f'{self.author_id} {self.name} {self.birth_date} {self.country}'


class Quote(Base):

    __tablename__ = 'quote'
    __tableargs__ = {
        'comment': ''
    }

    quote_id = Column(
        Integer,
        nullable=False,
        unique=True,
        primary_key=True,
        autoincrement=True
    )
    text = Column(Text, comment=' ')
    created_at = Column(DateTime, comment='    ')
    author_id = Column(Integer,  ForeignKey('author.author_id'), comment=' ')
    topic_id = Column(Integer, ForeignKey('topic.topic_id'), comment=' ')
    author = relationship('Author', backref='quote_author', lazy='subquery')
    topic = relationship('Topic', backref='quote_topic', lazy='subquery')

    def __repr__(self):
        return f'{self.text} {self.created_at} {self.author_id} {self.topic_id}'
      
      







, , . , Base



. , __tablename__



__tableargs__



.





, . , . relationship



. , , . lazy



, . joined



subquery



: , -, , - .





__repr__



, .





Nach dem Erstellen des Datenschemas können Sie die Tabellen auf verschiedene Arten erweitern. Um zu überprüfen, ob keine Inkonsistenzen vorliegen, können Sie die folgenden Zeilen verwenden, nachdem Sie zuvor die Datenbank erstellt haben (Beispiel: postgresql).





engine = create_engine('postgresql://user:password@host:port/db_name')
Base.metadata.create_all(engine)
      
      



Es ist jedoch viel bequemer, Tools zum Verwalten von Migrationen zu verwenden, z. B. Alembic. Tatsächlich können Sie die Datenbank von einem konsistenten Status in einen anderen verschieben.








All Articles