class Student(db.Model): id = db.Column(db.Integer, primary_key=True, autoincrement=True) s_name = db.Column(db.String(20)) s_score = db.Column(db.Integer) s_age = db.Column(db.Integer) # 声明关系 【对应的班级】 s_grade = db.Column(db.Integer, db.ForeignKey(Grade.id))
class MeetingAttendance(db.Model, DictMixin): __tablename__ = 'meeting_attendance' id = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey('user.id')) meeting_id = db.Column(db.Integer, db.ForeignKey('meeting.id'))
class User(db.Model, UserMixin): __tablename__ = 'users' id = db.Column(db.Integer(), autoincrement=True, primary_key=True) name = db.Column(db.String(64)) login = db.Column(db.String(64), unique=True) password = db.Column(db.String(255)) is_active = db.Column(db.Boolean(), server_default=expression.text('True'), nullable=False) # 这里使用 expression.true() 似乎不起作用 roles = db.relationship( 'Role', secondary=users_roles, backref=db.backref('users', lazy='dynamic') ) def set_password(self, password): return pbkdf2_sha256.hash(password) def check_password(self, password): return pbkdf2_sha256.verify(password, self.password) def is_authenticated(self): return not isinstance(self, AnonymousUserMixin) def is_anonymous(self): return isinstance(self, AnonymousUserMixin) def get_id(self): return self.id def __repr__(self): return '<Model User {}>'.format(self.name)
class BankCard(db.Model): __tablename__ = "bankcard" def __init__(self, name, card, user_id): self.name = name self.card = card self.user_id = user_id @classmethod def card_exist(cls, card, cardid=None): """验证卡号是否存在""" if cardid is None: return BankCard.query.filter_by(card=card).first() else: return BankCard.query.filter(BankCard.id != cardid, BankCard.card == card).first() @classmethod def id_exist(cls, id): """验证ID是否存在""" return BankCard.query.filter_by(id=id).first() id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(32)) #开户行 card = db.Column(db.String(25), unique=True) #银行卡号 user_id = db.Column(db.Integer, db.ForeignKey("user.id")) billflows = db.relationship('BillFlow', backref='bankcard') userp2ps = db.relationship('UserP2P', backref='bankcard')
class CinemaUser(BaseModel): username = db.Column(db.String(32), unique=True) _password = db.Column(db.String(256)) phone = db.Column(db.String(32), unique=True) is_delete = db.Column(db.Boolean, default=False) is_verify = db.Column(db.Boolean, default=False) @property def password(self): raise Exception("can't access") @password.setter def password(self, password_value): self._password = generate_password_hash(password_value) def check_password(self, password_value): return check_password_hash(self._password, password_value) def check_permission(self, permission): if not self.is_verify: return False permissions = CinemaUserPermission.query.filter_by(c_user_id=self.id) for user_permission in permissions: if permission == Permissions.query.get( user_permission.c_permission_id).p_name: return True return False
class Cate(db.Model): cid = db.Column(db.Integer, primary_key=True) cname = db.Column(db.String(64), index=True, unique=True, nullable=True) # 建立关联关系的对象 懒加载 """ 参数一 argument 关联的对象的类名 参数二 lazy 不能用于多对一 或者一对一上 可选项: 1> select 默认值 一条sql一句把所有的相关的数据全部查出来 2> dynamic 只查询主表的数据,生成查询子表的sql 当我们需要使用子表的数据的时候在去查询 3> immediate 等主表数据查询完成之后再去查询子表数据 back_populates 方向引用(当两个对象需要双向引用的时候使用) 值对应双向引用对象的字段 # backref backref='cate' 例如可以使用 shop.cate uselist=None, 如果想建立一对一的关系 直接在 uselist=false order_by=False,指定查询子表的排序字段 """ # 解决开发中有些时候查询主表相关联的子表的数据过大时 # 默认是 select 立即加载 # dynamic 懒加载 只会加载主表的数据,不会把子表的数据也加载进内存(只会生成sql语句, # 当我们需要用到数据的时候,去执行查询吧数据加载进内存) shops = db.relationship('Shop', back_populates='cate', order_by=Shop.sid, lazy='dynamic') # 只能用于一对多 还多对多 能通过一的一方的查询吧多的一方也查询出来 shops = db.relationship('Shop', back_populates='cate', lazy='dynamic')
class Note(Base): """ 公告表 """ __tablename__ = "notes" content = db.Column(db.String(255), nullable=False, comment="公告内容") level = db.Column(db.Integer(), default=0, comment="排序") start_date = db.Column(db.Date(), default="", comment="起始时间") end_date = db.Column(db.Date(), default="", comment="结束时间") admin_id = db.Column(db.Integer(), db.ForeignKey('admins.id')) admin = db.relationship('Admin', backref=db.backref('notes', lazy="dynamic")) @classmethod def _query_search(cls, query, _keyword): if _keyword is not None: keyword = '%' + str(_keyword) + '%' return query.filter(or_(cls.content.like(keyword), )) return query def create(self, data): with db.auto_commit(): self.set_attrs(data) self.active = 1 self.admin = current_user self.created_at = time_now() self.updated_at = time_now() db.session.add(self)
class Hall(db.Model): hid = db.Column(db.Integer, primary_key=True) # 设置外键 向关联影院 mid = db.Column(db.Integer, db.ForeignKey('cinemas.mid')) name = db.Column(db.String(64), index=True, unique=True, nullable=False) seats = db.Column(db.Integer, default=0) # 座位数 is_delete = db.Column(db.Boolean, default=False)
class ManagerFund(DictMixin, db.Model): __tablename__ = 'manager_fund' id = db.Column(db.Integer, primary_key=True) manager_id = db.Column(db.Integer) fund_id = db.Column(db.Integer)
class Link(Base): """ 友情链接表 """ __tablename__ = "links" site_name = db.Column(db.String(20), nullable=False, comment="网站名称", unique=True) site_url = db.Column(db.String(100), default="", comment="网址") label = db.Column(db.String(255), default="", comment="网站说明") logo = db.Column(db.String(100), default="", comment="网站logo") site_admin = db.Column(db.String(20), default="", comment="网站管理员") site_admin_email = db.Column(db.String(100), default="", comment="网站管理员邮箱") site_admin_qq = db.Column(db.String(20), default="", comment="网站管理员QQ") site_admin_phone = db.Column(db.String(20), default="", comment="网站管理员电话") home_show = db.Column(db.Boolean(), default=0, comment="首页显示") level = db.Column(db.Integer(), default=0, comment="排序") @classmethod def _query_search(cls, query, _keyword): if _keyword is not None: keyword = '%' + str(_keyword) + '%' return query.filter(or_(cls.site_name.like(keyword), cls.site_admin.like(keyword), cls.site_admin_email.like(keyword), cls.site_admin_qq.like(keyword), cls.site_admin_phone.like(keyword), cls.label.like(keyword), )) return query
class Column(Base): """ 栏目表 """ __tablename__ = "columns" title = db.Column(db.String(20), nullable=False, comment="栏目名称", unique=True) keyword = db.Column(db.String(255), default="", comment="META关键字") description = db.Column(db.String(255), default="", comment="META描述") column_type = db.Column(db.String(20), default="", comment="栏目类型") thumb_image = db.Column(db.String(100), default="", comment="栏目缩略图") label = db.Column(db.String(255), default="", comment="栏目说明") external_link = db.Column(db.String(100), default="", comment="外部链接") level = db.Column(db.Integer(), default=0, comment="排序") pid = db.Column(db.Integer(), default=0, comment="父级节点id") target = db.Column(db.Boolean(), default=0, comment="新窗口打开") @classmethod def _query_search(cls, query, _keyword): if _keyword is not None: keyword = '%' + str(_keyword) + '%' return query.filter( or_( cls.title.like(keyword), cls.keyword.like(keyword), cls.description.like(keyword), cls.label.like(keyword), )) return query
class Task(db.Model): # pylint: disable=too-few-public-methods """Task models""" id = db.Column(db.Integer, primary_key=True, autoincrement=True) userId = db.Column(db.String(256), nullable=False) taskListId = db.Column(db.Integer) name = db.Column(db.String(256), nullable=False) status = db.Column(db.Integer) # null = incomplete (0, 1) def toDict(self): """Transfer the model to dictionary""" task = { "id": self.id, "userId": self.userId, "taskListId": self.taskListId, "name": self.name, "status": self.status } return task def update(self, data): """Update tasks""" for key, value in data.items(): if key == "userId": self.userId = value elif key == "taskListId": self.taskListId = value elif key == "name": self.name = value elif key == "status": self.status = value
class TaskToTimer(db.Model): # pylint: disable=too-few-public-methods """This model manages relations between tasks and timers""" id = db.Column(db.Integer, primary_key=True, autoincrement=True) taskId = db.Column(db.Integer, nullable=False) timerId = db.Column(db.Integer, nullable=False) userId = db.Column(db.String(256), nullable=False) def update(self, data): """this function is for the server to update the relation class""" for key, value in data.items(): if key == "timerId": self.timerId = value elif key == "taskId": self.taskId = value elif key == "id": self.id = value def toDict(self): """Change the object to dictionary""" taskToTimer = { "id": self.id, "taskId": self.taskId, "timerId": self.timerId, "userId": self.userId } return taskToTimer
class EntitySet(db.Model): __tablename__ = 'entity_set' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(64)) group_id = db.Column(db.Integer, db.ForeignKey('group.id')) date_key = db.Column(db.Date)
class Collection(db.Model): __tablename__ = 'collection' id = db.Column(db.Integer, primary_key=True,autoincrement=True) name = db.Column(db.String(32), unique=True) user_id = db.Column(db.Integer, db.ForeignKey('user.id')) # sql orm框架在映射创建User对象的时候并不会执行init初始化方法 @orm.reconstructor def __init__(self): self.fields = ['id', 'name'] def keys(self): return self.fields # 用于隐藏某些key def hide(self, *field): for key in field: self.fields.remove(key) return self # 用于添加某些key def append(self, *field): for key in field: self.fields.append(key) return self def __getitem__(self, item): return getattr(self, item) # repr()方法显示一个可读字符串 def __repr__(self): return '<collection: %s %s>' % (self.name, self.id)
class StructureMetricValue(db.Model): __tablename__ = 'structure_metric_value' id = db.Column(db.Integer, primary_key=True) structure_id = db.Column(db.Integer, db.ForeignKey('structure.id')) metric_id = db.Column(db.Integer, db.ForeignKey('metric.id')) value = db.Column(db.Float) date_key = db.Column(db.Date)
class User(db.Model, UserMixin): uid = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(64), index=True, unique=True, nullable=False) password = db.Column(db.String(64), nullable=False) email = db.Column(db.String(100), nullable=False)
class EntityMetricValue(db.Model): __tablename__ = 'entity_metric_value' id = db.Column(db.Integer, primary_key=True) entity_id = db.Column(db.Integer, db.ForeignKey('entity.id')) metric_id = db.Column(db.Integer, db.ForeignKey('metric.id')) value = db.Column(db.Float) date_key = db.Column(db.Date)
class UserEntity(DictMixin, db.Model): __tablename__ = 'user_entity' id = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.Integer) entity_id = db.Column(db.Integer) set_id = db.Column(db.Integer) created_time = db.Column(db.DateTime, default=datetime.datetime.utcnow())
class Bookmark(DictMixin, db.Model): __tablename__ = 'bookmark' id = db.Column(db.Integer, primary_key=True) type = db.Column(db.Integer) bookmark_entity_id = db.Column(db.Integer) state = db.Column(db.Integer, default=1) # 1 in use ; 0 deleted created_time = db.Column(db.DateTime, default=datetime.datetime.utcnow())
class Role(db.Model): __tablename__ = 'roles' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(64), unique=True) users = db.relationship('User', backref='role') #反向引用查询管联,一对一时 uselist=False def __repr__(self): return '<Role %r>' % self.name
class ChartComment(DictMixin, db.Model): __tablename__ = 'chart_comment' id = db.Column(db.Integer, primary_key=True) chart_id = db.Column(db.String(255)) user_id = db.Column(db.Integer) comment = db.Column(db.String(255)) create_time = db.Column(db.DateTime, default=datetime.datetime.utcnow())
class Grade(db.Model): id = db.Column(db.Integer, primary_key=True, autoincrement=True) name = db.Column(db.String(40)) # 对应的学生(不会生成字段,只是为了声明) # db.relationship('关系模型类', backref='当前模型表名') # db.relationship('关系模型类', backref='当前模型表名', lazy=True) students = db.relationship('Student', backref='grade', lazy=True)
class Permission(db.Model): per_id = db.Column(db.Integer, primary_key=True) per_name = db.Column(db.String(64), nullable=False, index=True, unique=True) desc = db.Column(db.Text) def __init__(self, per_name, desc): self.per_name = per_name self.desc = desc
class Role(db.Model): role_id = db.Column(db.Integer, primary_key=True) role_name = db.Column(db.String(64), nullable=False, index=True, unique=True) desc = db.Column(db.Text) permissions = db.relationship('Permission', secondary=relation) def __init__(self, role_name, desc): self.role_name = role_name self.desc = desc
class Hall(db.Model): hid = db.Column(db.Integer, primary_key=True) #影院的外键 cid = db.Column(db.Integer, db.ForeignKey('cinemas.cid')) # 厅名 name = db.Column(db.String(64), index=True, nullable=False, unique=True) # 座位 seats = db.Column(db.String(256), default=0) is_delete = db.Column(db.Boolean, default=False)
class UserGoods(db.Model): id = db.Column(db.Integer, primary_key=True, autoincrement=True) u_goods = db.Column( db.Integer, db.ForeignKey(Goods.id, ondelete="CASCADE", onupdate="CASCADE")) u_user = db.Column( db.Integer, db.ForeignKey(User.id, ondelete="CASCADE", onupdate="CASCADE")) num = db.Column(db.Integer)
class ServiceDetail(db.Model): __tablename__ = 'service_detail' id = db.Column(db.Integer, primary_key=True) ss = db.Column(db.Boolean, default=True) third_party = db.Column(db.Boolean, default=True) revenue_strategy_id = db.Column(db.Integer, db.ForeignKey('revenue_strategy.id'))
class Student(db.Model): id = db.Column(db.Integer, primary_key=True, autoincrement=True) name = db.Column(db.String(40)) score = db.Column(db.Integer) # 添加关系 # 但是后续使用的时候,也可以获取关联的对象!!! # student.grade.name grade_id = db.Column(db.Integer, db.ForeignKey(Grade.id))
class Userlog(db.Model): __tablename__ = "userlog" id = db.Column(db.Integer, primary_key=True) #编号 user_id = db.Column(db.Integer, db.ForeignKey('user.id')) #外键关联会员表 ip = db.Column(db.String(100)) add_time = db.Column(db.DateTime, index=True, default=datetime.now) def __repr__(self): return "<Model Userlog {}>".format(self.id)