Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from sqlalchemy.ext.declarative import declarative_base
- from sqlalchemy import Column, Integer, String, ForeignKey, Table
- from sqlalchemy.orm import relationship
- Base = declarative_base()
- book_author = Table('book_author', Base.metadata,
- Column('book_id', ForeignKey('books.id'), primary_key=True),
- Column('author_id', ForeignKey('authors.id'), primary_key=True)
- )
- book_genre = Table('book_genre', Base.metadata,
- Column('book_id', ForeignKey('books.id')),
- Column('genre_id', ForeignKey('genres.id'))
- )
- book_interpreter = Table('book_interpreter', Base.metadata,
- Column('book_id', ForeignKey('books.id'), primary_key=True),
- Column('interpreter_id', ForeignKey('interpreters.id'), primary_key=True)
- )
- class Book(Base):
- __tablename__ = 'books'
- id = Column(Integer, primary_key=True)
- title = Column(String, nullable=False)
- number_of_pages = Column(Integer)
- printed_name = Column(String)
- description = Column(String)
- year_publish = Column(String)
- city_publish = Column(String)
- publisher = Column(String)
- in_language = Column(String)
- original_language = Column(String)
- image = relationship('Image', uselist=False, back_populates='book', cascade='all, delete, delete-orphan')
- isbn = relationship('Isbn', back_populates='book', lazy='dynamic', cascade='all, delete, delete-orphan')
- authors = relationship('Author', secondary=book_author, back_populates='books', lazy='dynamic')
- genres = relationship('Genre', secondary=book_genre, back_populates='books', lazy='dynamic')
- interpreters = relationship('Interpreter', secondary=book_interpreter, back_populates='books', lazy='dynamic')
- def __repr__(self):
- return '<Book %r>' % self.title
- class Author(Base):
- __tablename__ = 'authors'
- id = Column(Integer, primary_key=True)
- name = Column(String, nullable=True)
- gender = Column(String)
- birth_date = Column(String)
- birth_place = Column(String)
- death_date = Column(String)
- death_place = Column(String)
- author_bio = Column(String)
- books = relationship('Book', secondary=book_author, back_populates='authors', lazy='dynamic')
- def __repr__(self):
- return '<Author %r' % self.name
- class Genre(Base):
- __tablename__ = 'genres'
- id = Column(Integer, primary_key=True, autoincrement=True)
- name = Column(String, unique=True, sqlite_on_conflict_unique='IGNORE')
- books = relationship('Book', secondary=book_genre, back_populates='genres')
- def __repr__(self):
- return '<Genre %r' % self.name
- class Interpreter(Base):
- __tablename__ = 'interpreters'
- id = Column(Integer, primary_key=True, autoincrement=True)
- name = Column(String)
- books = relationship('Book', secondary=book_interpreter, back_populates='interpreters')
- def __repr__(self):
- return '<Interpreter %r' % self.name
- class Isbn(Base):
- __tablename__ = 'isbn'
- id = Column(Integer, primary_key=True, autoincrement=True)
- name = Column(String, nullable=False)
- book_id = Column(Integer, ForeignKey('books.id'))
- book = relationship('Book', back_populates='isbn')
- def __repr__(self):
- return '<ISBN %r' % self.name
- class Image(Base):
- __tablename__ = 'images'
- checksum = Column(String, primary_key=True)
- path = Column(String, nullable=False, default='full/no_cover.jpg')
- book_id = Column(Integer, ForeignKey('books.id'))
- book = relationship('Book', back_populates='image')
- def __repr__(self):
- return '<Images %r' % self.checksum
Advertisement
Add Comment
Please, Sign In to add comment