half broke version, but its working... need to do the subquery to get list of all real books without subs, but also make sense of how author data is coming through without marshmallow of BookSchema?

This commit is contained in:
2020-11-05 20:12:31 +11:00
parent 21c792203c
commit 1a2555739d
2 changed files with 42 additions and 7 deletions

39
main.py
View File

@@ -22,6 +22,15 @@ book_publisher_link = db.Table('book_publisher_link', db.Model.metadata,
db.Column('publisher_id', db.Integer, db.ForeignKey('publisher.id'))
)
class Book_Sub_Book_Link(db.Model):
__tablename__ = 'book_sub_book_link'
book_id = db.Column( db.Integer, db.ForeignKey('book.id'), primary_key=True)
sub_book_id = db.Column( db.Integer, db.ForeignKey('book.id'), primary_key=True)
sub_book_num = db.Column( db.Integer )
def __repr__(self):
return "<book_id: {}, sub_book_id: {}, sub_book_num>".format(self.book_id, self.sub_book_id, self.sub_book_num )
class Book(db.Model):
id = db.Column(db.Integer, unique=True, nullable=False, primary_key=True)
title = db.Column(db.String(100), unique=True, nullable=False)
@@ -37,9 +46,14 @@ class Book(db.Model):
author = db.relationship('Author', secondary=book_author_link)
publisher = db.relationship('Publisher', secondary=book_publisher_link)
# sub_book = db.relationship('Book', secondary="book_sub_book_link",
# primaryjoin="Book.id == Book_Sub_Book_Link.book_id",
# secondaryjoin="Book.id == Book_Sub_Book_Link.sub_book_id",
# backref="parent_book",
# )
def __repr__(self):
return "<title: {}, id: {}>".format(self.title, self.id )
return "<id: {}, title: {}, year_published: {}, rating: {}, condition: {}, owned: {}, covertype: {}, notes: {}, blurb: {}, created: {}, modified: {}, publisher: {}>".format(self.title, self.id, self.year_published, self.rating, self.condition, self.owned, self.covertype, self.notes, self.blurb, self.created, self.modified, self.publisher )
class Author(db.Model):
id = db.Column(db.Integer, unique=True, nullable=False, primary_key=True)
@@ -71,28 +85,43 @@ class PublisherSchema(ma.SQLAlchemyAutoSchema):
include_relationships = True
load_instance = True
class BookSchema(ma.SQLAlchemyAutoSchema):
class Book_Sub_Book_Link(ma.SQLAlchemyAutoSchema):
class Meta:
model = Book
model = Book_Sub_Book_Link
include_relationships = True
load_instance = True
#class BookSchema(ma.SQLAlchemyAutoSchema):
# class Meta:
# model = Book
# include_relationships = True
# load_instance = True
author_schema = AuthorSchema()
publisher_schema = PublisherSchema()
book_schema = BookSchema()
book_sub_book_link_schema = Book_Sub_Book_Link()
#book_schema = BookSchema()
####################################### ROUTES #######################################
@app.route("/books", methods=["GET"])
def books():
if request.form:
print(request.form)
books = Book.query.all()
# books = Book.query.all()
#### quick hack - lets just return all the books not in the first 6, but should be those that are not in list of book_id's from book_sub_book_link
books = Book.query.filter( ~ Book.id.in_([0, 1, 2, 3, 4, 5, 6]) ).all()
return render_template("books.html", books=books)
@app.route("/book/<id>", methods=["GET"])
def book(id):
book = Book.query.get(id)
book_s = book_schema.dump(book)
subs = db.engine.execute ( "select book_id, sub_book_id, sub_book_num from book_sub_book_link where book_id = " + id )
sub_book=[]
for row in subs:
sub_book.append( { 'sub_book_id': row.sub_book_id, 'sub_book_num': row.sub_book_num } )
book_s['sub_book'] = sub_book
return render_template("books.html", books=book_s )
@app.route("/authors", methods=["GET"])