Advertisement
Guest User

Many-to-Many between Category and Book

a guest
Aug 4th, 2014
346
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.50 KB | None | 0 0
  1. from flask import Flask
  2. from flask.ext.sqlalchemy import SQLAlchemy
  3.  
  4. from sqlalchemy import ForeignKey, UniqueConstraint, DateTime
  5. from sqlalchemy.orm import relationship, backref
  6.  
  7. app = Flask(__name__)
  8. app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
  9. db = SQLAlchemy(app)
  10.  
  11.  
  12. class User(db.Model):
  13.     __tablename__ = 'user'
  14.     pk_id = db.Column(db.Integer, primary_key=True)
  15.     active = db.Column(db.Boolean(), nullable=False, default=False)
  16.     username = db.Column(db.String(50), nullable=False, unique=True)
  17.     password = db.Column(db.String(255), nullable=False, default='')
  18.  
  19.  
  20. class BookCategoryLink(db.Model):
  21.     __tablename__ = 'book_category_link'
  22.     book_id = db.Column(
  23.         db.Integer, ForeignKey('book.pk_id'), primary_key=True
  24.     )
  25.     category_id = db.Column(
  26.         db.Integer, ForeignKey('category.pk_id'), primary_key=True
  27.     )
  28.  
  29.  
  30. class Category(db.Model):
  31.     __tablename__ = 'category'
  32.     pk_id = db.Column(db.Integer, primary_key=True, unique=True)
  33.     category_title = db.Column(db.String(50))
  34.     books = relationship(
  35.         'Book', secondary=BookCategoryLink.__table__,
  36.         backref=backref('categories')
  37.     )
  38.  
  39.     def __init__(self, category_title):
  40.         self.category_title = category_title
  41.  
  42.  
  43. class Book(db.Model):
  44.     __tablename__ = 'book'
  45.     pk_id = db.Column(db.Integer, primary_key=True)
  46.     book_name = db.Column(db.String(256))
  47.  
  48.     def __init__(self, book_name):
  49.         self.book_name = book_name
  50.  
  51.  
  52. class Rating(db.Model):
  53.     __tablename__ = 'rating'
  54.     __table_args__ = (UniqueConstraint('user_id', 'book_id'),)
  55.  
  56.     id = db.Column(db.Integer, primary_key=True)
  57.     user_id = db.Column(db.Integer, ForeignKey('user.pk_id'))
  58.     book_id = db.Column(db.Integer, ForeignKey('book.pk_id'))
  59.  
  60.     user = relationship('User', backref=backref('ratings'))
  61.     book = relationship('Book', backref=backref('ratings'))
  62.  
  63.     # genre, mood, plot, etc.
  64.     genre = db.Column(db.String(50))
  65.     plot = db.Column(db.String(50))
  66.     mood = db.Column(db.String(50))
  67.     pub_date = db.Column(db.DateTime)
  68.  
  69.  
  70. db.create_all()
  71.  
  72.  
  73. user = User(active=True, username='test', password='test')
  74. db.session.add(user)
  75. horror = Category('Horror')
  76. fantasy = Category('Fantasy')
  77. the_shining = Book('The Shining')
  78. the_shining.categories.append(horror)
  79. the_shining.categories.append(fantasy)
  80. db.session.add(the_shining)
  81. rating = Rating(
  82.     user=user, book=the_shining,
  83. )
  84. db.session.add(rating)
  85. db.session.commit()
  86. db.session.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement