Créer un schéma de base de données à l'aide de SQLAlchemy

On a beaucoup dit que SQLAlchemy est l'une des bibliothèques les plus populaires pour créer des schémas de base de données. Aujourd'hui, nous allons examiner un exemple simple de création d'un petit schéma de données pour une application de recherche de devis. Nous utiliserons PostgreSQL comme un SGBD.





Nous utiliserons une approche déclarative pour définir les modèles, car, à mon avis, elle est plus simple et plus claire que l'approche classique basée sur mapper. Commençons par esquisser le diagramme er.





, , , .





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__



, .





Après avoir créé le schéma de données, vous pouvez développer les tables de différentes manières. Pour vérifier qu'il n'y a pas d'incohérences, vous pouvez utiliser les lignes suivantes, après avoir préalablement créé la base de données (l'exemple est pour postgresql).





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



Mais il est beaucoup plus pratique d'utiliser des outils de gestion des migrations, par exemple l'alambic. En fait, il vous permet de déplacer la base de données d'un état cohérent à un autre.








All Articles