class Comment(db.Model): id = db.Column(db.Integer, primary_key=True) body = db.Column(db.String(100), nullable=False) timestamp = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) post_id = db.Column(db.Integer, db.ForeignKey('post.id'), nullable=False) user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) # Author username = db.Column(db.String, nullable=False) # Author, easier for username display, no circular import
class ItemFavorite(db.Model): __tablename__ = 'item_favorite' id = db.Column(db.Integer, primary_key=True, autoincrement=True) user_id = db.Column(db.Integer, db.ForeignKey('user.id', onupdate='CASCADE', ondelete='CASCADE')) item_id = db.Column(db.Integer, db.ForeignKey('item.id', onupdate='CASCADE', ondelete='CASCADE')) created_at = db.Column(db.DateTime, nullable=False, default=datetime.now) updated_at = db.Column(db.DateTime, nullable=False, default=datetime.now, onupdate=datetime.now) def postRecord(self): db.session.add(self) db.session.commit() db.session.refresh(self) return self @classmethod def getRecordByUserAndItemId(cls, item_id, user_id): record = cls.query.filter_by(user_id=user_id, item_id=item_id).first() current_app.logger.debug(record) return record @classmethod def addTestData(cls): categories = [] data_lists = ['grain', 'vegetable', 'fruit', 'other'] for data in data_lists: categories.append(cls(data)) db.session.add_all(categories) db.session.commit() # class CategorySchema(ma.SQLAlchemyAutoSchema): # class Meta: # model = Category
class SeanceModel(db.Model): __tablename__ = 'seance' seanceId = db.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, unique=True, nullable=False) time = db.Column(db.Time, nullable=False) date = db.Column(db.Date, nullable=False) hallId = db.Column(UUID(as_uuid=True), db.ForeignKey('hall.hallId')) movieId = db.Column(UUID(as_uuid=True), db.ForeignKey('movie.movieId')) ticketsSold = db.Column(db.Integer, default=0) tickets = db.relationship("TicketModel", backref="seance") def __init__(self, _id=None, time=None, date=None, hallId=None, movieId=None, ticketsSold=None): self.id = _id or id self.time = time self.date = date self.hallId = hallId self.movieId = movieId self.ticketsSold = ticketsSold
class Comment(db.Model): id = db.Column(db.Integer, primary_key=True) content = db.Column(db.Text) # Relationship Post <--> Comment post_id = db.Column(db.Integer, db.ForeignKey('post.id')) post = db.relationship('Post', back_populates='comments') # Relationship User <--> Comment user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
class Reservation(db.Model): id = db.Column(db.Integer, primary_key=True) collect_date = db.Column(db.DateTime) reservation_time = db.Column(db.DateTime) paid = db.Column(db.Boolean) collected = db.Column(db.Boolean) pack = db.Column(db.Boolean) product_id = db.Column(db.Integer, db.ForeignKey('product.id')) user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
class MatchEnCours(db.Model): id = db.Column(db.Integer, primary_key=True) id_personnage1 = db.Column(db.Integer, db.ForeignKey(Personnage.id)) id_personnage2 = db.Column(db.Integer, db.ForeignKey(Personnage.id)) def serialize(self): return { "id": self.id, "id_personnage1": self.id_personnage1, "id_personnage2": self.id_personnage2 }
class ItemImage(db.Model): __tablename__ = 'item_image' id = db.Column(db.Integer, primary_key=True, autoincrement=True) item_id = db.Column( db.Integer, db.ForeignKey('item.id', onupdate='CASCADE', ondelete='CASCADE')) url = db.Column(db.String(255), nullable=False) created_at = db.Column(db.DateTime, nullable=False, default=datetime.now) updated_at = db.Column(db.DateTime, nullable=False, default=datetime.now, onupdate=datetime.now) def __init__(self, url='', item_id=None): self.url = url self.item_id = item_id def postRecord(self): db.session.add(self) db.session.commit() db.session.refresh(self) return self @classmethod def getImage(cls, image_id): record = cls.query.filter_by(id=image_id).first() return record # class ItemImageSchema(ma.SQLAlchemyAutoSchema): # class Meta: # model = ItemImage # # load_instance = True
class Post(db.Model): id = db.Column( db.Integer, primary_key=True ) # Post id, will also be used for unique post url and image naming as we don't # have a dedicated server to store images for this project user_id = db.Column(db.Integer, db.ForeignKey('user.id')) # Author id username = db.Column( db.String ) # Easier to display username this way (avoid circular import) date = db.Column(db.Date, default=datetime.now()) image_name = db.Column( db.String ) # For local storage, post_id + file_extension (.jpg, .png ...) description = db.Column(db.Text) hearts = db.Column(db.Integer) # The number of "likes" of the post current_user_liked_it = db.Column( db.Boolean ) # To know if the current user liked this post or not (no multiple likes) comments = db.relationship('Comment', backref='article', lazy=True) tags = db.Column(db.Text) def __init__(self, user_id, username, image_name, description, tags, hearts=0): self.user_id = user_id self.username = username self.image_name = image_name self.description = description self.hearts = hearts self.current_user_liked_it = False self.tags = tags
class TicketModel(db.Model): __tablename__ = 'ticket' __table_args__ = (db.UniqueConstraint( 'seatId', 'seanceId', name='unique_ticket_seat_and_seance'), ) ticketId = db.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, unique=True, nullable=False) price = db.Column(db.Float) seatId = db.Column(UUID(as_uuid=True), db.ForeignKey('seat.seatId')) seanceId = db.Column(UUID(as_uuid=True), db.ForeignKey('seance.seanceId')) def __init__(self, _id=None, price=None, seatId=None, seanceId=None): self.id = _id or id self.price = price self.seatId = seatId self.seanceId = seanceId
class Order(db.Model): id = db.Column(db.Integer, primary_key=True) order_date = db.Column(db.DateTime) delivery_date = db.Column(db.DateTime, nullable=True) delivered = db.Column(db.Boolean) validated = db.Column(db.Boolean) ordered_by = db.Column(db.Integer, db.ForeignKey('users.id')) paid = db.Column(db.Boolean) items = db.relationship("OrderItem")
class Match(db.Model): id = db.Column(db.Integer, primary_key=True) id_gagnant = db.Column(db.Integer, db.ForeignKey(Personnage.id)) ancien_elo_gagnant = db.Column(db.Float) nouvel_elo_gagnant = db.Column(db.Float) id_perdant = db.Column(db.Integer, db.ForeignKey(Personnage.id)) ancien_elo_perdant = db.Column(db.Float) nouvel_elo_perdant = db.Column(db.Float) def serialize(self): return { "id": self.id, "id_gagnant": self.id_gagnant, "ancien_elo_gagnant": self.ancien_elo_gagnant, "nouvel_elo_gagnant": self.nouvel_elo_gagnant, "id_perdant": self.id_perdant, "ancien_elo_perdant": self.ancien_elo_perdant, "nouvel_elo_perdant": self.nouvel_elo_perdant }
class Feedback(db.Model): id = db.Column(db.Integer, primary_key=True, autoincrement=True) detail = db.Column(db.String, nullable=False) posted_at = db.Column(db.DateTime, default=datetime.now()) talk_id = db.Column(db.Integer, db.ForeignKey(Talk.id), nullable=False) talks = db.relationship('Talk', lazy='select', backref=db.backref('feedback_list', lazy='dynamic')) def __init__(self, detail, talk_id): self.detail = detail self.talk_id = talk_id def __repr__(self): return '<detail %r>' % self.detail
class Post(db.Model): id = db.Column(db.Integer, primary_key=True) content = db.Column(db.Text) # Pour stocker l'image sous une suite de bytes BLOB. On encode l'encode en BLOB (app.py), elle est stocké dans la # database, puis elle sera décodé en BLOB lors de son affichage (homepage.html.jinja2) image_data = db.Column(db.BLOB) image_size = db.Column(db.Integer) tags = db.Column(db.Text) # Relationship User <--> Post user_id = db.Column(db.Integer, db.ForeignKey('user.id')) # Relationship Comment <--> Post # back-populates permet que lorsqu'on ajoute un commentaire il est aussi ajouté dans l'attribut comment de post comments = db.relationship('Comment', back_populates='post') # Relationship PostLike <--> Post # backref <=> comment on appel l'attribut de la jointure ici comment.post likes = db.relationship('PostLike', backref='post', lazy='dynamic')
class SeatModel(db.Model): __tablename__ = 'seat' seatId = db.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, unique=True, nullable=False) number = db.Column(db.Integer) row = db.Column(db.Integer) hallId = db.Column(UUID(as_uuid=True), db.ForeignKey('hall.hallId')) tickets = db.relationship("TicketModel", backref="seat") def __init__(self, _id=None, number=None, row=None, hallId=None): self.id = _id or id self.number = number self.row = row self.hallId = hallId
class Auth(db.Model): __tablename__ = 'auth' id = db.Column(db.Integer, primary_key=True, autoincrement=True) user_id = db.Column( db.Integer, db.ForeignKey('user.id', onupdate='CASCADE', ondelete='CASCADE')) email = db.Column(db.String(50), unique=True, nullable=False) password = db.Column(db.String(300), nullable=False) created_at = db.Column(db.DateTime, nullable=False, default=datetime.now) updated_at = db.Column(db.DateTime, nullable=False, default=datetime.now, onupdate=datetime.now) def __init__(self, user_id='', email='', password=''): self.user_id = user_id self.email = email self.password = hashlib.sha256(password.encode('utf-8')).hexdigest() def setAttr(self, user_id='', email='', password=''): self.user_id = user_id self.email = email self.password = hashlib.sha256(password.encode('utf-8')) def postRecord(self): db.session.add(self) db.session.commit() return @classmethod def getRecordsAll(cls): records = cls.query.all() return records @classmethod def getRecordByEmail(cls, email): record = cls.query.filter_by(email=email).first() return record @classmethod def getRecordsByUserId(cls, user_id): record = cls.query.filter_by(user_id=user_id).first() return record
from database.database import db followers = db.Table( 'followers', db.Column('follower_id', db.Integer, db.ForeignKey('user.id')), db.Column('followed_id', db.Integer, db.ForeignKey('user.id')))
class Post(db.Model): id = db.Column(db.Integer, primary_key=True) title = db.Column(db.Text) content = db.Column(db.Text) # Relationship User <--> Post user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
class User(db.Model): userID = db.Column(db.Integer, primary_key=True) teamID = db.Column(db.Integer, db.ForeignKey('teams.teamID')) emailAddress = db.Column(db.String(255))
class Koe(db.Model): __tablename__ = 'koe' id = db.Column(db.Integer, primary_key=True, autoincrement=True) title = db.Column(db.String(25), nullable=False) text = db.Column(db.Text, nullable=False) created_at = db.Column(db.DateTime, nullable=False, default=datetime.now) updated_at = db.Column(db.DateTime, nullable=False, default=datetime.now, onupdate=datetime.now) user_id = db.Column(db.Integer, db.ForeignKey('user.id', onupdate='CASCADE', ondelete='CASCADE')) item_id = db.Column(db.Integer, db.ForeignKey('item.id', onupdate='CASCADE', ondelete='CASCADE')) item = db.relationship('Item', primaryjoin='Koe.item_id==Item.id', backref='koes') favorites = db.relationship('KoeFavorite', backref='koe') def __init__(self, title='', text='', user_id='', item_id=''): self.title = title self.text = text self.user_id = user_id self.item_id = item_id def postRecord(self): db.session.add(self) db.session.commit() return self @classmethod def getRecordById(cls, koe_id): record = cls.query.filter_by(id=koe_id).first() return record @classmethod def getRecordsBySearch(cls, args): records = cls.query for k, v in args.items(): if (k == 'text'): records = records.filter(or_(cls.title.like('%' + v + '%'), cls.text.like('%' + v + '%'))) if (k == 'order_by'): order_by = v if (int(v) == 1): current_app.logger.debug(order_by) records = records.order_by(desc(cls.updated_at)) records = records.all() return records @classmethod def getRecordsByItem(cls, item_id): record = cls.query.filter_by(item_id=item_id).order_by(desc(cls.updated_at)).all() return record @classmethod def getRecordsByPostUser(cls, user_id): record = cls.query.filter_by(user_id=user_id).order_by(desc(cls.updated_at)).all() return record @classmethod def getRecordsByCatchUser(cls, user_id): record = cls.query.filter(cls.item.has(user_id=user_id)).order_by(desc(cls.updated_at)).all() return record @classmethod def getRecordsByNew(cls): record = cls.query.order_by(desc(cls.updated_at)).all() return record @classmethod def addTestData(cls): categories = [] data_lists = ['grain', 'vegetable', 'fruit', 'other'] for data in data_lists: categories.append(cls(data)) db.session.add_all(categories) db.session.commit()
class OrderItem(db.Model): id = db.Column(db.Integer, primary_key=True) order_id = db.Column(db.Integer, db.ForeignKey('order.id')) item = db.Column(db.Integer, db.ForeignKey('products.id')) quantity = db.Column(db.Integer)
class PrixMenu(db.Model): sandwich_principal = db.Column(db.Integer, db.ForeignKey('products.id'), primary_key=True) prix = db.Column(db.Float)
class Item(db.Model): __tablename__ = 'item' id = db.Column(db.Integer, primary_key=True, autoincrement=True) name = db.Column(db.String(20), nullable=False) # 商品名 description = db.Column(db.Text) # 商品説明文 period = db.Column(db.Integer, nullable=False) # 販売日数 remaining_days = db.Column(db.Integer, nullable=False) remaining_format_id = db.Column( db.Integer, db.ForeignKey('remaining_format.id', onupdate='CASCADE', ondelete='CASCADE')) category_id = db.Column(db.Integer, db.ForeignKey('category.id', onupdate='CASCADE', ondelete='CASCADE')) # 設定したカテゴリのID shipment = db.Column(db.Integer, nullable=False) # 配送にかかる時間(日) price = db.Column(db.Integer, nullable=False) # 商品の値段 volume = db.Column(db.String(10), nullable=False) # 商品の1セットあたりの量 area = db.Column(db.String(50), nullable=False) state = db.Column(db.Integer, default=1) # 商品の状態 user_id = db.Column( db.Integer, db.ForeignKey('user.id', onupdate='CASCADE', ondelete='CASCADE')) created_at = db.Column(db.DateTime, nullable=False, default=datetime.now) updated_at = db.Column(db.DateTime, nullable=False, default=datetime.now, onupdate=datetime.now) images = db.relationship('ItemImage', backref='item', lazy="joined") item_transactions = db.relationship('ItemTransaction', backref='item') favorites = db.relationship('ItemFavorite', backref='item') # koes = db.relationship('Koe', backref='item') def __init__(self, name=None, description=None, period=None, remaining_days=None, remaining_format_id=None, category_id=None, shipment=None, price=None, volume='', area='', state=None, user_id=None): self.name = name self.description = description self.period = period self.remaining_days = remaining_days self.remaining_format_id = remaining_format_id self.category_id = category_id self.shipment = shipment self.price = price self.volume = volume self.area = area self.state = state self.user_id = user_id def postRecord(self): db.session.add(self) db.session.commit() @classmethod def getProductById(cls, item_id, user_id=0): record = db.session.query( cls, func.count(ItemFavorite.id), func.sum(ItemTransaction.set_count).label('remaining_set_count') ).select_from(cls).filter(cls.id == item_id).outerjoin( ItemTransaction, and_( ItemTransaction.item_id == cls.id, or_( cls.remaining_format.has(name='whole'), and_(cls.remaining_format.has(name='week'), ItemTransaction.created_at >= monday, ItemTransaction.created_at <= sunday), and_(cls.remaining_format.has(name='month'), ItemTransaction.created_at >= month_first, ItemTransaction.created_at <= month_last), and_(cls.remaining_format.has(name='day'), ItemTransaction.created_at >= day_first, ItemTransaction.created_at <= day_last)))).outerjoin( ItemFavorite, and_(ItemFavorite.item_id == cls.id, ItemFavorite.user_id == user_id)).group_by( cls.id).first() return record @classmethod def getItemsBySearch(cls, user_id, args): current_app.logger.debug(args) order_by = False records = db.session.query( cls, func.count(ItemFavorite.id), func.sum(ItemTransaction.set_count).label( 'remaining_set_count')).select_from(cls) for k, v in args.items(): if (k == 'text'): records = records.filter( or_(cls.name.like('%' + v + '%'), cls.description.like('%' + v + '%'), cls.area.like('%' + v + '%'))) if (k == 'category'): records = records.filter(cls.category_id == v) if (k == 'order_by'): order_by = v if (int(v) == 1): current_app.logger.debug(order_by) records = records.order_by(desc(cls.updated_at)) records = records.outerjoin( ItemTransaction, and_( ItemTransaction.item_id == cls.id, or_( cls.remaining_format.has(name='whole'), and_(cls.remaining_format.has(name='week'), ItemTransaction.created_at >= monday, ItemTransaction.created_at <= sunday), and_(cls.remaining_format.has(name='month'), ItemTransaction.created_at >= month_first, ItemTransaction.created_at <= month_last), and_(cls.remaining_format.has(name='day'), ItemTransaction.created_at >= day_first, ItemTransaction.created_at <= day_last)))).outerjoin( ItemFavorite, and_(ItemFavorite.item_id == cls.id, ItemFavorite.user_id == user_id)).group_by( cls.id).order_by(desc( cls.updated_at)).all() return records @classmethod def getItemsByFavorite(cls, user_id=0): records = db.session.query( cls, func.count(ItemFavorite.id), func.sum(ItemTransaction.set_count).label('remaining_set_count') ).select_from(cls).filter( cls.favorites.any(user_id=user_id)).outerjoin( ItemTransaction, and_( ItemTransaction.item_id == cls.id, or_( cls.remaining_format.has(name='whole'), and_(cls.remaining_format.has(name='week'), ItemTransaction.created_at >= monday, ItemTransaction.created_at <= sunday), and_(cls.remaining_format.has(name='month'), ItemTransaction.created_at >= month_first, ItemTransaction.created_at <= month_last), and_( cls.remaining_format.has(name='day'), ItemTransaction.created_at >= day_first, ItemTransaction.created_at <= day_last)))).outerjoin( ItemFavorite, and_( ItemFavorite.item_id == cls.id, ItemFavorite.user_id == user_id)).group_by( cls.id).order_by(desc( cls.updated_at)).all() return records @classmethod def getItemsByNew(cls, user_id=0): records = db.session.query( cls, func.count(ItemFavorite.id), func.sum(ItemTransaction.set_count).label('remaining_set_count') ).select_from(cls).outerjoin( ItemTransaction, and_( ItemTransaction.item_id == cls.id, or_( cls.remaining_format.has(name='whole'), and_(cls.remaining_format.has(name='week'), ItemTransaction.created_at >= monday, ItemTransaction.created_at <= sunday), and_(cls.remaining_format.has(name='month'), ItemTransaction.created_at >= month_first, ItemTransaction.created_at <= month_last), and_(cls.remaining_format.has(name='day'), ItemTransaction.created_at >= day_first, ItemTransaction.created_at <= day_last)))).outerjoin( ItemFavorite, and_(ItemFavorite.item_id == cls.id, ItemFavorite.user_id == user_id)).group_by( cls.id).order_by(desc( cls.updated_at)).all() return records @classmethod def getItemsByUserId(cls, user_id=0): records = db.session.query( cls, func.count(ItemFavorite.id), func.sum(ItemTransaction.set_count).label('remaining_set_count') ).select_from(cls).filter(cls.user_id == user_id).outerjoin( ItemTransaction, and_( ItemTransaction.item_id == cls.id, or_( cls.remaining_format.has(name='whole'), and_(cls.remaining_format.has(name='week'), ItemTransaction.created_at >= monday, ItemTransaction.created_at <= sunday), and_(cls.remaining_format.has(name='month'), ItemTransaction.created_at >= month_first, ItemTransaction.created_at <= month_last), and_(cls.remaining_format.has(name='day'), ItemTransaction.created_at >= day_first, ItemTransaction.created_at <= day_last)))).outerjoin( ItemFavorite, and_(ItemFavorite.item_id == cls.id, ItemFavorite.user_id == user_id)).group_by( cls.id).order_by(desc( cls.updated_at)).all() return records
class Team(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.Text) sport_id = db.Column(db.Integer, db.ForeignKey('sport.id')) sport = db.relationship('Sport', backref='teams') # Sport <-> Team relationship players = db.relationship('Player', backref='teams', secondary=junction_table) # Sport <-> Player relationship
class Menu(db.Model): id = db.Column(db.Integer, primary_key=True) sandwich = db.Column(db.Integer, db.ForeignKey('products.id')) boisson = db.Column(db.Integer, db.ForeignKey('products.id')) dessert = db.Column(db.Integer, db.ForeignKey('products.id'))
import datetime # Constants SANDWICH = 0 DRINK = 1 DESSERT = 2 MENU = 3 class Sport(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.Text) junction_table = db.Table('participation', db.Column('team_id', db.Integer, db.ForeignKey('team.id')), db.Column('player_id', db.Integer, db.ForeignKey('player.id')), ) class Team(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.Text) sport_id = db.Column(db.Integer, db.ForeignKey('sport.id')) sport = db.relationship('Sport', backref='teams') # Sport <-> Team relationship players = db.relationship('Player', backref='teams', secondary=junction_table) # Sport <-> Player relationship class Player(db.Model): id = db.Column(db.Integer, primary_key=True) firstname = db.Column(db.Text)
class Follow(db.Model): follower_id = db.Column(db.Integer, db.ForeignKey('user.id'), primary_key=True) followed_id = db.Column(db.Integer, db.ForeignKey('user.id'), primary_key=True)
from database.database import db from models.code import Code from models.talk import Talk code_talk = db.Table('code_talk', db.Column('code_id', db.String, db.ForeignKey(Code.id), primary_key=True), db.Column('talk_id', db.Integer, db.ForeignKey(Talk.id), primary_key=True) )
class PostLike(db.Model): id = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey('user.id')) post_id = db.Column(db.Integer, db.ForeignKey('post.id'))
class ItemTransaction(db.Model): __tablename__ = 'item_transaction' id = db.Column(db.Integer, primary_key=True, autoincrement=True) item_id = db.Column(db.Integer, db.ForeignKey('item.id', onupdate='CASCADE', ondelete='CASCADE')) # 出品者id seller_id = db.Column(db.Integer, db.ForeignKey('user.id', onupdate='CASCADE', ondelete='CASCADE')) # 出品者id buyer_id = db.Column(db.Integer, db.ForeignKey('user.id', onupdate='CASCADE', ondelete='CASCADE')) # 購入者id set_count = db.Column(db.Integer, nullable=False) # 販売数 state = db.Column(db.Integer, nullable=False, default=0) created_at = db.Column(db.DateTime, nullable=False, default=datetime.now) updated_at = db.Column(db.DateTime, nullable=False, default=datetime.now, onupdate=datetime.now) seller = db.relationship( 'User', primaryjoin="ItemTransaction.seller_id==User.id") buyer = db.relationship( 'User', primaryjoin="ItemTransaction.buyer_id==User.id") def __init__(self, item_id='', seller_id='', buyer_id='', set_count='', state=0): self.item_id = item_id self.seller_id = seller_id self.buyer_id = buyer_id self.set_count = set_count self.state = state def postRecord(self): db.session.add(self) db.session.commit() db.session.refresh(self) @classmethod def getRecordById(cls, transaction_id): record = cls.query.filter_by(id=transaction_id).first() return record @classmethod def getRecordsByItemId(cls, item_id): records = cls.query.filter_by(item_id=item_id).all() return records @classmethod def getRecordsBySellerIdStateSold(cls, seller_id): records = cls.query.filter_by(seller_id=seller_id, state=2).all() return records @classmethod def getRecordsBySellerId(cls, seller_id): records = cls.query.filter_by(seller_id=seller_id).all() return records @classmethod def getRecordsByBuyerId(cls, buyer_id): records = cls.query.filter_by(buyer_id=buyer_id).all() return records @classmethod def getSalesDetailBySellerId(cls, seller_id, item_model): record = db.session.query(func.sum(item_model.price * cls.set_count)).\ select_from(cls).\ filter(and_(seller_id==seller_id, cls.state==2)).\ outerjoin(item_model, item_model.id == cls.item_id).\ group_by(cls.buyer_id).\ first() return record