```
# -*- coding: utf-8 -*-
from flask import current_app
from sqlalchemy import Column, Integer, String, Boolean, ForeignKey, desc
from sqlalchemy.orm import relationship
from app.models.base import Base
from app.spider.YuShuBook import YuShuBook
class Gift(Base):
id = Column(Integer, primary_key=True)
user = relationship('User')
uid = Column(Integer, ForeignKey('user.id'))
isbn = Column(String(15), nullable=False)
# book = relationship('Book')
# bid = Column(Integer, ForeignKey('user.id'))
launched = Column(Boolean, default=False)
# status = Column(SmallInteger,)
@property
def book(self):
ysb = YuShuBook()
ysb.search_by_isbn(self.isbn)
return ysb.first
@classmethod
def recent(cls):
recent_gift = Gift.query.filter_by(launched=False).group_by(Gift.isbn).order_by(
desc(Gift.create_time)).limit(current_app.config['RECENT_BOOK_COUNT']).distinct().all()
return recent_gift
from datetime import datetime
__author__ = '七月'
from flask_sqlalchemy import SQLAlchemy as _SQLAlchemy, BaseQuery
from sqlalchemy import Column, Integer, SmallInteger
from contextlib import contextmanager
class SQLAlchemy(_SQLAlchemy):
@contextmanager
def auto_commit(self):
try:
yield
self.session.commit()
except Exception as e:
db.session.rollback()
raise e
class Query(BaseQuery):
def filter_by(self, **kwargs):
if 'status' not in kwargs.keys():
kwargs['status'] = 1
return super(Query, self).filter_by(**kwargs)
db = SQLAlchemy(query_class=Query)
class Base(db.Model):
__abstract__ = True
create_time = Column('create_time', Integer)
status = Column(SmallInteger, default=1)
def __init__(self):
self.create_time = int(datetime.now().timestamp())
def set_attrs(self, attrs_dict):
for key, value in attrs_dict.items():
if hasattr(self, key) and key != 'id':
setattr(self, key, value)
@property
def create_datetime(self):
if self.create_time:
return datetime.fromtimestamp(self.create_time)
else:
return None
def delete(self):
self.status = 0
7月老师深入浅出剖析Flask核心机制,和你一起探讨Python高级编程
了解课程