Guest User

Untitled

a guest
Apr 17th, 2020
211
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.73 KB | None | 0 0
  1. from sqlalchemy.ext.declarative import declarative_base
  2. from sqlalchemy import Column, Integer, String, ForeignKey, Table
  3. from sqlalchemy.orm import relationship
  4.  
  5. Base = declarative_base()
  6.  
  7. book_author = Table('book_author', Base.metadata,
  8.                     Column('book_id', ForeignKey('books.id'), primary_key=True),
  9.                     Column('author_id', ForeignKey('authors.id'), primary_key=True)
  10.                     )
  11.  
  12. book_genre = Table('book_genre', Base.metadata,
  13.                    Column('book_id', ForeignKey('books.id')),
  14.                    Column('genre_id', ForeignKey('genres.id'))
  15.                    )
  16.  
  17. book_interpreter = Table('book_interpreter', Base.metadata,
  18.                          Column('book_id', ForeignKey('books.id'), primary_key=True),
  19.                          Column('interpreter_id', ForeignKey('interpreters.id'), primary_key=True)
  20.                          )
  21.  
  22.  
  23. class Book(Base):
  24.     __tablename__ = 'books'
  25.  
  26.     id = Column(Integer, primary_key=True)
  27.     title = Column(String, nullable=False)
  28.     number_of_pages = Column(Integer)
  29.     printed_name = Column(String)
  30.     description = Column(String)
  31.     year_publish = Column(String)
  32.     city_publish = Column(String)
  33.     publisher = Column(String)
  34.     in_language = Column(String)
  35.     original_language = Column(String)
  36.     image = relationship('Image', uselist=False, back_populates='book', cascade='all, delete, delete-orphan')
  37.     isbn = relationship('Isbn', back_populates='book', lazy='dynamic', cascade='all, delete, delete-orphan')
  38.     authors = relationship('Author', secondary=book_author, back_populates='books', lazy='dynamic')
  39.     genres = relationship('Genre', secondary=book_genre, back_populates='books', lazy='dynamic')
  40.     interpreters = relationship('Interpreter', secondary=book_interpreter, back_populates='books', lazy='dynamic')
  41.  
  42.     def __repr__(self):
  43.         return '<Book %r>' % self.title
  44.  
  45.  
  46. class Author(Base):
  47.     __tablename__ = 'authors'
  48.  
  49.     id = Column(Integer, primary_key=True)
  50.     name = Column(String, nullable=True)
  51.     gender = Column(String)
  52.     birth_date = Column(String)
  53.     birth_place = Column(String)
  54.     death_date = Column(String)
  55.     death_place = Column(String)
  56.     author_bio = Column(String)
  57.     books = relationship('Book', secondary=book_author, back_populates='authors', lazy='dynamic')
  58.  
  59.     def __repr__(self):
  60.         return '<Author %r' % self.name
  61.  
  62.  
  63. class Genre(Base):
  64.     __tablename__ = 'genres'
  65.  
  66.     id = Column(Integer, primary_key=True, autoincrement=True)
  67.     name = Column(String, unique=True, sqlite_on_conflict_unique='IGNORE')
  68.     books = relationship('Book', secondary=book_genre, back_populates='genres')
  69.  
  70.     def __repr__(self):
  71.         return '<Genre %r' % self.name
  72.  
  73.  
  74. class Interpreter(Base):
  75.     __tablename__ = 'interpreters'
  76.  
  77.     id = Column(Integer, primary_key=True, autoincrement=True)
  78.     name = Column(String)
  79.     books = relationship('Book', secondary=book_interpreter, back_populates='interpreters')
  80.  
  81.     def __repr__(self):
  82.         return '<Interpreter %r' % self.name
  83.  
  84.  
  85. class Isbn(Base):
  86.     __tablename__ = 'isbn'
  87.  
  88.     id = Column(Integer, primary_key=True, autoincrement=True)
  89.     name = Column(String, nullable=False)
  90.     book_id = Column(Integer, ForeignKey('books.id'))
  91.     book = relationship('Book', back_populates='isbn')
  92.  
  93.     def __repr__(self):
  94.         return '<ISBN %r' % self.name
  95.  
  96.  
  97. class Image(Base):
  98.     __tablename__ = 'images'
  99.  
  100.     checksum = Column(String, primary_key=True)
  101.     path = Column(String, nullable=False, default='full/no_cover.jpg')
  102.     book_id = Column(Integer, ForeignKey('books.id'))
  103.     book = relationship('Book', back_populates='image')
  104.  
  105.     def __repr__(self):
  106.         return '<Images %r' % self.checksum
Advertisement
Add Comment
Please, Sign In to add comment