Compare commits
2 Commits
765b939998
...
5dde0468d0
Author | SHA1 | Date | |
---|---|---|---|
5dde0468d0 | |||
cd18b3ab46 |
1
.gitignore
vendored
1
.gitignore
vendored
@ -160,3 +160,4 @@ cython_debug/
|
|||||||
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
||||||
#.idea/
|
#.idea/
|
||||||
|
|
||||||
|
*.bak
|
||||||
|
@ -1,12 +1,17 @@
|
|||||||
from sqlalchemy import Column, Integer, VARCHAR
|
from sqlalchemy import Column, Integer, String
|
||||||
from sqlalchemy.orm import relationship
|
from sqlalchemy.orm import relationship
|
||||||
from sqlalchemy.ext.declarative import declarative_base
|
from sqlalchemy.ext.declarative import declarative_base
|
||||||
|
|
||||||
|
from .book import Book
|
||||||
|
|
||||||
Base = declarative_base()
|
Base = declarative_base()
|
||||||
|
|
||||||
class Author(Base):
|
|
||||||
__tablename__ = "author"
|
|
||||||
|
|
||||||
id = Column(Integer, primary_key=True)
|
class Author(Base):
|
||||||
first_name = Column(VARCHAR(length=50))
|
__tablename__ = 'author'
|
||||||
last_name = Column(VARCHAR(length=50))
|
|
||||||
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||||
|
first_name = Column(String(50), nullable=False)
|
||||||
|
last_name = Column(String(50), nullable=False)
|
||||||
|
|
||||||
|
books = relationship('Book', back_populates='author')
|
||||||
|
28
src/models/book.py
Normal file
28
src/models/book.py
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
from sqlalchemy import Column, Integer, String, TIMESTAMP, Text, ForeignKey, Enum
|
||||||
|
from sqlalchemy.orm import relationship
|
||||||
|
from sqlalchemy.ext.declarative import declarative_base
|
||||||
|
|
||||||
|
from .author import Author
|
||||||
|
from .book_category import BookCategory
|
||||||
|
|
||||||
|
Base = declarative_base()
|
||||||
|
|
||||||
|
|
||||||
|
class Book(Base):
|
||||||
|
__tablename__ = 'book'
|
||||||
|
|
||||||
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||||
|
author_id = Column(Integer, ForeignKey(
|
||||||
|
'author.id'), nullable=False, index=True)
|
||||||
|
title = Column(String(100), nullable=False)
|
||||||
|
description = Column(Text, nullable=False)
|
||||||
|
year_published = Column(String(4), nullable=False)
|
||||||
|
isbn = Column(String(13), nullable=False, unique=True)
|
||||||
|
status = Column(Enum('available', 'borrowed', 'reserved'),
|
||||||
|
nullable=False, default='available')
|
||||||
|
created_at = Column(TIMESTAMP, nullable=True, default="CURRENT_TIMESTAMP")
|
||||||
|
|
||||||
|
author = relationship('Author', back_populates='books')
|
||||||
|
# loans = relationship('Loan', back_populates='book')
|
||||||
|
categories = relationship(
|
||||||
|
'BookCategory', secondary='book_category_link', back_populates='books')
|
19
src/models/book_category.py
Normal file
19
src/models/book_category.py
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
from .book import Book
|
||||||
|
from sqlalchemy import Column, Integer, String, TIMESTAMP, Text, ForeignKey, Enum
|
||||||
|
from sqlalchemy.orm import relationship
|
||||||
|
from sqlalchemy.ext.declarative import declarative_base
|
||||||
|
|
||||||
|
Base = declarative_base()
|
||||||
|
|
||||||
|
|
||||||
|
class BookCategory(Base):
|
||||||
|
__tablename__ = 'book_category'
|
||||||
|
|
||||||
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||||
|
parent_category_id = Column(Integer, ForeignKey(
|
||||||
|
'book_category.id'), nullable=True, index=True)
|
||||||
|
name = Column(String(100), nullable=False, unique=True)
|
||||||
|
|
||||||
|
parent_category = relationship('BookCategory', remote_side=[id])
|
||||||
|
books = relationship(
|
||||||
|
'Book', secondary='book_category_link', back_populates='categories')
|
10
src/models/book_category_link.py
Normal file
10
src/models/book_category_link.py
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
from sqlalchemy import Column, Integer, ForeignKey
|
||||||
|
from sqlalchemy.ext.declarative import declarative_base
|
||||||
|
|
||||||
|
Base = declarative_base()
|
||||||
|
|
||||||
|
class BookCategoryLink(Base):
|
||||||
|
__tablename__ = 'book_category_link'
|
||||||
|
|
||||||
|
book_id = Column(Integer, ForeignKey('book.id'), primary_key=True, index=True)
|
||||||
|
book_category_id = Column(Integer, ForeignKey('book_category.id'), primary_key=True, index=True)
|
Loading…
x
Reference in New Issue
Block a user