class Vipcode(db.Model): __tablename__ = 't_vipcode' id = db.Column(db.String(255), primary_key=True) code = db.Column(db.String(32)) is_use = db.Column(db.Integer) create_date = db.Column(db.DateTime, default=datetime.datetime.now()) expire_date = db.Column(db.DateTime, default=datetime.datetime.now())
class User(db.Model, UserMixin): uid = db.Column(db.Integer, primary_key=True, autoincrement=True) username = db.Column(db.String(64), unique=True, index=True, nullable=False) _password = db.Column(db.String(128), nullable=False) _is_active = db.Column(db.Boolean, default=False) # 表示用户被管理员干掉了 is_delete = db.Column(db.Boolean, default=False) @property def is_active(self): return self._is_active def get_id(self): return self.uid @property def password(self): return self._password # 对密码进行加密 @password.setter def password(self, password): if password: self._password = custom_app_context.encrypt(password) else: raise Exception('password is not null') # 验证密码 def verify_password(self, password): return custom_app_context.verify(password, self._password)
class Catalog(db.Model): # 分类名称表 __tablename__ = 't_catalog' id = db.Column(db.String(255), primary_key=True) is_use = db.Column(db.Integer) name = db.Column(db.String(32)) sort = db.Column(db.Integer) # 排序 isVip = db.Column(db.Integer, default=0)
class Category(db.Model): __tablename__ = 'category' id = db.Column(db.Integer, primary_key=True) category = db.Column(db.String(100), nullable=True) update_time = db.Column(db.DateTime, default=datetime.now) create_time = db.Column(db.DateTime, default=datetime.now()) is_delete = db.Column(db.Boolean, default=0)
class User(db.Model): uid = db.Column(db.Integer, autoincrement=True, primary_key=True) username = db.Column(db.String(100), unique=True, index=True, nullable=False) image = db.relationship('Image', back_populates='user', uselist=False)
class User(db.Model, UserMixin): #这里继承的必须改成id 不是id要重写底层 id = db.Column(db.Integer, primary_key=True, autoincrement=True) username = db.Column(db.String(64), unique=True, nullable=False) password_hash = db.Column(db.String(128), nullable=False) # 0 表示未激活 1 表示激活 is_delete = db.Column(db.Integer, default=0) # 验证数据 # 声明的时候是方法 # 使用的时候是属性 @property def password(self): return self.password_hash # md5 @password.setter def password(self, password): if len(password) >= 8: # 对密码进行加密 self.password_hash = generate_password_hash(password) else: raise Exception('密码不符合规范') # 明文 123456 def verify_password(self, password): return check_password_hash(self.password_hash, password)
class Travel(db.Model): travel_id = db.Column(db.Integer, primary_key=True, autoincrement=True) title = db.Column(db.String(100), unique=True, index=True, nullable=False) price = db.Column(db.Numeric(9, 2), default=0.00, nullable=False) create_date = db.Column(db.DateTime, default=datetime.datetime.now()) is_delete = db.Column(db.Boolean, default=0) images = db.relationship('Image', backref='travel', lazy='dynamic')
class Permission(db.Model): per_id = db.Column(db.Integer, primary_key=True) per_name = db.Column(db.String(64), index=True, unique=True) desc = db.Column(db.Text) def __init__(self, per_name, desc): self.per_name = per_name self.desc = desc
class Record(db.Model): __tablename__ = 'record' id = db.Column(db.String(10), primary_key=True, autoincrement=True) time = db.Column(db.DateTime, nullable=False) operation = db.Column(db.String(20), nullable=False) user_id = db.Column(db.String(10), db.ForeignKey('user.id', ondelete='CASCADE'), nullable=False)
class User(db.Model,UserMixin): __tablename__='user' id=db.Column(db.Integer,primary_key=True) name=db.Column(db.String(30),nullable=False) pwd=db.Column(db.String(30),nullable=False) def __repr__(self): return "User {}".format(self.name)
class ErrorData(db.Model): __tablename__ = 'error_data' id = db.Column(db.String(10), primary_key=True, autoincrement=True) time = db.Column(db.DateTime, nullable=True) value = db.Column(db.Float, nullable=False) sensor_id = db.Column(db.String(10), db.ForeignKey('bridge.id', ondelete='CASCADE'), nullable=False)
class Notice(db.Model): __tablename__ = 'notice' id = db.Column(db.Integer, primary_key=True) message = db.Column(db.String(512), nullable=True) # img=db.Column(db.String(256),default=None) update_time = db.Column(db.DateTime, default=datetime.now) create_time = db.Column(db.DateTime, default=datetime.now()) is_delete = db.Column(db.Boolean, default=0)
class Role(db.Model): role_id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(64), index=True, unique=True) desc = db.Column(db.Text) permission = db.relationship('Permission', secondary=relation) def __init__(self, role_name, desc): self.role_name = role_name self.desc = desc
class User(db.Model): uid = db.Column(db.Integer, primary_key=True, autoincrement=True) username = db.Column(db.String(100), unique=True, nullable=False) addrs = db.relationship( 'Address', lazy='dynamic', backref='user', uselist=True, )
class Image(db.Model): img_id = db.Column(db.Integer, autoincrement=True, primary_key=True) path = db.Column(db.String(255), unique=True, default='') # 1表示用户头像 2表示商户头像 type = db.Column(db.SmallInteger, nullable=False) create_date = db.Column(db.DateTime, default=datetime.datetime.now()) # 外键字段(主表类名.字段) # 查询字段 uid = db.Column(db.Integer, db.ForeignKey(User.uid), unique=True) user = db.relationship('User', back_populates='image', uselist=False)
class TodoList(db.Model): __tablename__ = 'todolist' id=db.Column(db.Integer,primary_key=True) user_id=db.Column(db.Integer,nullable=False) title=db.Column(db.String(254),nullable=False) status=db.Column(db.String(10),nullable=False) create_time=db.Column(db.Integer,default=int(time.time())) def __repr__(self): return "TodoList {}".format(self.title)
class Bridge(db.Model): __tablename__ = 'bridge' id = db.Column(db.String(10), primary_key=True, autoincrement=True) name = db.Column(db.String(20), nullable=False) address = db.Column(db.String(50), nullable=False) state = db.Column(db.Boolean, nullable=False) sensor_list = db.relationship('sensor', backref='bridge', cascade='all, delete-orphan', passive_deletes=True)
class Destination(db.Model): des_id = db.Column(db.Integer, primary_key=True, autoincrement=True) des_name = db.Column(db.String(100), unique=True, index=True, nullable=False) price = db.Column(db.Numeric(9, 2), default=0.00, nullable=False) create_date = db.Column(db.DateTime, default=datetime.datetime.now()) is_delete = db.Column(db.Boolean, default=0) photo_list = db.relationship('Photo', backref='destination', lazy='dynamic' )
class Url(db.Model): id = db.Column(db.Integer, primary_key=True) short_url_code = db.Column(db.String(32)) long_url = db.Column(db.String(1000)) create_time = db.Column(db.DateTime(), default=datetime.now) @classmethod def is_unique_short_url(cls, value=None): """ 传入code判断是否唯一""" urls = cls.query.filter_by(short_url_code=value).first() if urls: return False else: return True @property def short_url(self): """短域名""" return current_app.config['BASE_URL'] + self.short_url_code @classmethod def generic_short_url_code(cls): short_url_code = generic_codes(5) return short_url_code if cls.is_unique_short_url( short_url_code) else generic_short_url_code(cls) @classmethod def save_url(cls, long_url): url = cls.has_the_long_url(long_url) if url: return url short_url_code = cls.generic_short_url_code() url = cls(short_url_code=short_url_code, long_url=long_url) db.session.add(url) db.session.commit() return url @classmethod def has_the_long_url(cls, long_url): url = cls.query.filter_by(long_url=long_url).first() return url if url else None @classmethod def convert_to_long(cls): """短域名访问后需要转为常常的域名""" code = request.path.strip('/') url = cls.query.filter_by(short_url_code=code).first() if url: long_url = url.long_url if not long_url.startswith('http'): long_url = 'http://' + long_url return long_url else: raise ApiException(msg='not found', code=404, error_code=404)
class UserShop(db.Model): sid = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(64), index=True, unique=True) #类名小写.关联子段,只是单纯的建立一个外键关系 cid = db.Column(db.Integer, db.ForeignKey('cate.cid')) #同上 # cid = db.Column(db.Integer, db.ForeignKey(Cate.cid)) #双向引用时候使用 cate = db.relationship('Cate', back_populates='shops') #一对一 detail = db.relationship('Detail', uselist=False, backref='usershop')
class UserLogin(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(256), nullable=False) email = db.Column(db.String(64), nullable=False) #如果使用自定义的id需要重写该方法 def get_id(self): return self.uid
class HallScheduling(db.Model): hsid = db.Column(db.Integer, primary_key=True, autoincrement=True) # 1未开始 2正在放映 3结束放映 status = db.Column(db.Integer, default=1) start = db.Column(db.DateTime) end = db.Column(db.DateTime) origin_price = db.Column(db.Numeric(7, 2)) current_price = db.Column(db.Numeric(7, 2)) movie_id = db.Column(db.Integer, db.ForeignKey(Movie.id)) cinema_id = db.Column(db.Integer, db.ForeignKey(Cinema.cid)) hall_id = db.Column(db.Integer, db.ForeignKey(Hall.hid)) is_delete = db.Column(db.Boolean, default=True) ss_list = db.relationship('SeatScheduling', lazy='dynamic', backref='hs')
class User(db.Model): __tablename__ = 'user' id = db.Column(db.String(10), primary_key=True, autoincrement=True) username = db.Column(db.String(20), unique=True, nullable=False) password = db.Column(db.String(50), nullable=False) inspect_list = db.relationship('inspect_data', backref='user', cascade='all, delete-orphan', passive_deletes=True) record_list = db.relationship('record', backref='user', cascade='all, delete-orphan', passive_deletes=True)
class Category(db.Model): # 主键 cate_id = db.Column(db.Integer, autoincrement=True, primary_key=True) name = db.Column(db.String(30), unique=True, index=True, nullable=False) create_date = db.Column(db.DateTime, default=datetime.datetime.now()) status = db.Column(db.Boolean, default=True) # userlist=True表示一对多 默认为True # userlist=False表示一对一 ''' lazy select 表示一次性将所有的数据全部加载进内存 dynamic 延迟加载(懒加载),先加载主表的数据,当我们去使用主表相关的数据的时候才去执行查询 当数据比较多的时候建议使用dynamic ''' subs = db.relationship('SubCategory', lazy='dynamic', backref='category')
class UserBill(db.Model): __tablename__ = 'userbill' id = db.Column(db.Integer, primary_key=True, autoincrement=True) user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) b_type = db.Column(db.String(1)) fund_type = db.Column(db.String(1)) number = db.Column(db.String(20)) balance = db.Column(db.String(20)) memo = db.Column(db.String(50)) ref_info = db.Column(db.String(100)) create_time = db.Column(db.DateTime, default=datetime.now)
class Shop(db.Model): shop_id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(64), index=True, unique=True) sub_title = db.Column(db.String(64)) original_price = db.Column(db.Numeric(10, 2)) promote_price = db.Column(db.Numeric(10, 2)) stock = db.Column(db.Integer) cate_id = db.Column(db.Integer) create_date = db.Column(db.DateTime, default=datetime.datetime.now())
class User(db.Model): uid = db.Column(db.Integer, primary_key=True, autoincrement=True) username = db.Column(db.String(64), index=True, unique=True, nullable=False) password = db.Column(db.String(100), nullable=False) email = db.Column(db.String(100)) phone = db.Column(db.Integer, nullable=False) create_date = db.Column(db.DateTime, default=datetime.datetime.now()) url = db.Column(db.String(100)) is_delete = db.Column(db.Boolean, default=False)
class Seats(db.Model): sid = db.Column(db.Integer, primary_key=True, autoincrement=True) # 1.普通 2.豪华 3 超豪华 type = db.Column(db.Integer, nullable=False) x = db.Column(db.Integer, nullable=False) y = db.Column(db.Integer, nullable=False) status = db.Column(db.Boolean, default=True) is_active = db.Column(db.Boolean, default=True) # 是否可选 is_choose = db.Column(db.Boolean, default=True) # 外键设置 cid = db.Column(db.Integer, db.ForeignKey(Cinemas.cid)) hid = db.Column(db.Integer, db.ForeignKey(Halls.hid))
class InspectData(db.Model): __tablename__ = 'inspect_data' id = db.Column(db.String(10), primary_key=True, autoincrement=True) time = db.Column(db.DateTime, nullable=True) sensor_id = db.Column(db.String(10), nullable=True) sensor_state = db.Column(db.Boolean, nullable=True) bridge_id = db.Column(db.String(10), nullable=True) bridge_state = db.Column(db.Boolean, nullable=True) picture_route = db.Column(db.String(50), nullable=True) # 图片文件路径 remark = db.Column(db.String(200), nullable=True) user_id = db.Column(db.String(10), db.ForeignKey('user.id', ondelete='CASCADE'), nullable=False)
class Sensor(db.Model): __tablename__ = 'sensor' id = db.Column(db.String(10), primary_key=True, autoincrement=True) type = db.Column(db.String(10), nullable=False) # 传感器类型 name = db.Column(db.String(10), nullable=False) # 传感器名 long = db.Column(db.Boolean, nullable=False) # 是否是长时传感器 bridge_id = db.Column(db.String(10), db.ForeignKey('bridge.id', ondelete='CASCADE'), nullable=False) # 所属桥梁id error_data_list = db.relationship('error_data', backref='sensor', cascade='all, delete-orphan', passive_deletes=True) raw_data_list = db.relationship('raw_data', backref='bridge', cascade='all, delete-orphan', passive_deletes=True)