class Teacher(db.Model): __tablename__ = 'teachers' id = db.Column(db.Integer(), primary_key=True, autoincrement=True) teacher_name = db.Column(db.String(32)) def __repr__(self): return self.teacher_name
class Coffees(db.Model): # 表名 __tablename__ = 'coffees' id = db.Column(db.Integer(), primary_key=True, autoincrement=True) # 咖啡名 coffee_name = db.Column(db.String(64), nullable=False) # 图片 coffee_img = db.Column(db.String(128), nullable=False)
class Article(db.Model): __tablename__ = 'article' id = db.Column(db.Integer(), primary_key=True) # 书名 title = db.Column(db.String(32), nullable=False) # 双向关系 tag = db.relationship('Tag', secondary=article_tag, backref='article')
class User(db.Model): id = db.Column(db.Integer, primary_key=True, autoincrement=True, name='uid') username = db.Column(db.String(60)) __tablename__ = 'bbs_user'
class Users(db.Model): __tablename__ = 'users' id = db.Column(db.Integer(), primary_key=True, autoincrement=True) # 用户名 username = db.Column(db.String(32), unique=True) # 密码 password = db.Column(db.String(128), nullable=False) # 头像 保存图片名 或图片路径 avatar = db.Column(db.String(128), nullable=True)
class Posts(db.Model): id = db.Column(db.Integer, primary_key=True) content = db.Column(db.Text) title = db.Column(db.String(50), default='电影名称') pid = db.Column(db.Integer, default=0) image = db.Column(db.String(255), default='defaultImage,') timestamp = db.Column(db.DateTime, default=datetime.utcnow) uid = db.Column(db.Integer, db.ForeignKey('user.id')) characters = db.Column(db.String(255), default='暂无详细演员信息') #演员名称 director = db.Column(db.String(255), default="暂无详细导演信息") selfread = db.Column(db.Text, default="暂无作者观后感")
class Message(DB_base, db.Model): __tablename__ = 'message' id = db.Column(db.Integer, primary_key=True) fid = db.Column(db.Integer) # 文件id uid = db.Column(db.Integer) # 作者id eid = db.Column(db.Integer) # 审稿者id name = db.Column(db.String(12), index=True) # 评论者用户名 timestamp = db.Column(db.DateTime, default=datetime.utcnow) # 发送消息的时间 state = db.Column(db.Enum('未回复', '已回复', '收到'), default='未回复') # 消息回复状态 title = db.Column(db.String(20), index=True) # 稿件标题 content = db.Column(db.String(256)) # 回复的内容 expert = db.Column(db.Boolean, default=False) # 是否为专家发言
class Posts(db.Model, Base): __tablename__ = 'posts' id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(23), index=True) article = db.Column(db.Text) pid = db.Column(db.Integer, default=0) path = db.Column(db.Text, default='0,') fabulous = db.Column(db.Integer, default=0) times = db.Column(db.Integer, default=0) timestamp = db.Column(db.DateTime, default=datetime.utcnow()) scan = db.Column(db.Integer, default=0) #外键,与user表主键id关联,进行关联查询 #表迁移后 表中会有一个uid字段 一对多 一个用户发表多个帖子 uid = db.Column(db.Integer, db.ForeignKey('user.id'))
class Corp_score(db.Model): __table_args__ = {'schema': config_map['postgresql']['schema']} code = db.Column(db.String(255), primary_key=True) score = db.Column(db.String(2048)) def save(self): db.session.add(self) db.session.commit() def to_json(self): dict = self.__dict__ if "_sa_instance_state" in dict: del dict["_sa_instance_state"] return dict
class Posts(DB_Base, db.Model): __tablename__ = 'posts' id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(20), index=True) # 博客标题 article = db.Column(db.Text) # 博客的内容 pid = db.Column(db.Integer, default=0) # 父id path = db.Column(db.Text, default='0,') # 路径 visit = db.Column(db.Integer, default=0) # 访问量 timestamp = db.Column(db.DateTime, default=datetime.utcnow) # 发表时间 # 设置一对多外键 uid = db.Column(db.Integer, db.ForeignKey('user.id')) # 设置外键 关联主表user的自增id state = db.Column(db.Integer, default=0) # 是否所有人可见
class Posts(Base, db.Model): id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(23), index=True) article = db.Column(db.Text) pid = db.Column(db.Integer, default=0) path = db.Column(db.Text, default='0,') fabulous = db.Column(db.Integer, default=0) times = db.Column(db.Integer, default=0) timestamp = db.Column(db.DateTime, default=datetime.utcnow) #使用ForeignKey 来创建表的外键 作用是 和数据库中的user表(用户信息表)进行关联查询 表迁移以后 表中救会有一个 uid的字段 一对多 关系 一个用户 发表多个帖子 多的表使用ForeignKey 来关联1的一方 #uid是模型Posts下的posts表单中的外键,关联的是User模型下的user表单中的id值,通过id值就可以找到对应的用户名,知道文章或评论是谁发的。 uid = db.Column(db.Integer, db.ForeignKey('user.id'))
class Superuser(UserMixin, db.Model): __table__name = 'superuser' id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(12), index=True) password_hash = db.Column(db.String(128)) ''' 参数1模型名称。参数2 反响引用字段名称,参数3,加载方式,提供对象 ''' # users =db.relationship('User',backref='stu111', lazy=True) # users = db.relationship('User',backref='superuser',lazy='dynamic') # uid = db.relationship('User',secondary='superanduser',backref=db.backref('superuser',lazy='dynamic'),lazy='dynamic') users = db.relationship('User', backref='superuser', lazy='dynamic') icon = db.Column(db.String(70), default='admin.jpg') #生成token的方法 def generate_token(self): s = Seralize(current_app.config['SECRET_KEY']) return s.dumps({'id': self.id}) @staticmethod def check_token(token): s = Seralize(current_app.config['SECRET_KEY']) #从当前token中拿出字典 try: id = s.loads(token)['id'] except: return False s = Superuser.query.get(id) if not s: return False def check_password_hash(self, password): return check_password_hash(self.password_hash, password) #定义一个删除电影的方法 def remove_posts(self, pid): post = Posts.query.get(id=pid) if not post: return False #如果存在该电影信息 #1.判断是否有user收藏该电影,将该post剔除收藏的posts # User.query.filter_by() # Users=User.query.filter(favorite.id=pid) # for i in users: db.session.delete(post) db.session.commit()
class Email(db.Model): __tablename__ = 'emails' id = db.Column(db.Integer(), primary_key=True) email = db.Column(db.String(64)) # 一对多 # 声明外键 一般放在多的一方 # db.ForeignKey(表名.主键) t_id = db.Column(db.Integer, db.ForeignKey('teachers.id')) # Teacher.mail << ==== >>Email.teacher 双向关系 # 反向查询 teacher = db.relationship('Teacher', backref='mail') def __repr__(self): return self.email
class User(UserMixin, Base, db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(10), unique=True, index=True) password_hash = db.Column(db.String(128)) sex = db.Column(db.Boolean, default=True) age = db.Column(db.Integer, default=20) email = db.Column(db.String(50)) icon = db.Column(db.String(40), default='default.jpg') confirm = db.Column(db.Boolean, default=False) #当前用户是否激活 """ 参数1 引用关系的模型 参数2 backref 反向引用的字段 给posts模型 添加了一个user属性 这个属性是替代uid 来进行对象的查询的 uid这个字段用不上 参数3 加载数据条目(如何加载) dynamic 返回query对象 也就是你所看到的sql语句 默认是select.... 返回 一个列表 装有所有帖子对象的列表 不用的原因:不能呢个通过过滤器 再次筛选或者其它操作 """ # posts = db.relationship('Posts',backref='user',lazy='dynamic') posts = db.relationship('Posts', backref='user', lazy='dynamic') @property def password(self): raise AttributeError('密码不可读') #将明文密码 变成hash加密在赋给 字段属性 password_hash @password.setter def password(self, password): self.password_hash = generate_password_hash(password) #验证用户密码 def check_password(self, password): return check_password_hash(self.password_hash, password) # 生成token 通过邮件发送token值 进行账户的激活 def generate_token(self): s = Seralize(current_app.config['SECRET_KEY']) return s.dumps({'id': self.id}) #检测token值是否正确 @staticmethod def check_token(token): s = Seralize(current_app.config['SECRET_KEY']) try: Dict = s.loads(token) #加载出token的字典 id = Dict['id'] #拿到用户的id u = User.query.get(id) #查询id的对象是否存在 在则为 <user n> 否则为None if not u: raise ValueError #以上的代码只有出现问题 则都执行except except: return False #判断账户是否没有激活 没有则激活 激活了则返回True if not u.confirm: u.confirm = True u.save() return True
class Posts(Base,db.Model): __tablename__ = 'posts' id = db.Column(db.Integer,primary_key=True) title = db.Column(db.String(20)) #标题 content = db.Column(db.Text) #博客内容 pid = db.Column(db.Integer,default=0) #pid为0则为博客 否则为评论和回复 path = db.Column(db.Text,default='0,') #路径path visit = db.Column(db.Integer,default=0) #访问量 timestamp = db.Column(db.DateTime,default=datetime.utcnow) #发表的时间 state = db.Column(db.Boolean,default=True) #默认所有人可见 uid = db.Column(db.Integer,db.ForeignKey('user.id')) def __str__(self): return self.title
class Posts(DB_Base, db.Model): __tablename__ = 'posts' id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(20), index=True) # 标题 article = db.Column(db.Text) # md格式正文 pid = db.Column(db.Integer, default=0) # 父id path = db.Column(db.Text, default='0,') # 路径 visit = db.Column(db.Integer, default=0) # 文章访问量 timestamp = db.Column(db.DateTime, default=datetime.utcnow) # 发表时间 state = db.Column(db.Integer, default=0) # 是否所有人可见 img = db.Column(db.String(70)) # 图片 tags = db.relationship('Categorys', secondary=posts_categorys, backref=db.backref('posts')) u_id = db.Column(db.Integer, db.ForeignKey('user.id')) # 关联主表user的自增id
class Category(db.Model): cid = db.Column(db.Integer, primary_key=True, autoincrement=True) classname = db.Column(db.String(60), nullable=False) parentid = db.Column(db.Integer, default=0) replycount = db.Column(db.Integer) compere = db.Column(db.String(200)) forumcount = db.Column(db.Integer) classpic = db.Column(db.String(300)) description = db.Column(db.String(3000), name='descrition') lastpost = db.Column(db.String(3000)) __tablename__ = 'bbs_category' def __str__(self): return f"{self.classname}"
class User(UserMixin,Base,db.Model): id=db.Column(db.Integer,primary_key=True) username=db.Column(db.String(12),unique=True,index=True) userpass_hash=db.Column(db.String(128)) sex=db.Column(db.Boolean,default=True) birth = db.Column(db.String(20)) email=db.Column(db.String(50)) icon = db.Column(db.String(40), default='default.jpg') confirm=db.Column(db.Boolean,default=False) #给User模型设置一个外键接口,对接Posts模型与User模型下的user表,采用带参数(dynamic)的方式对接。 posts=db.relationship('Posts',backref='user',lazy='dynamic') #用property和setter的方法将方法变成像属性一样可以被调用,方便对其进行赋值,比较,判断等。 @property #将password变成属性,当调用User.password时,抛出错误,让密码不可读。 def password(self): raise AttributeError('密码不可读') @password.setter #给password属性设置方法,将用户输入的密码进行hash加密。 def password(self,userpass): self.userpass_hash=generate_password_hash(userpass) #定义检查密码的方法 def check_password(self,password): return check_password_hash(self.userpass_hash,password) #定义生成token的方法 def generate_token(self): #用字符串作为参数将Seralize实例化, s = Seralize(current_app.config['SECRET_KEY']) #调用dumps方法以数据id为令牌,生成加密字符串;token为json类型. return s.dumps({'id':self.id}) @staticmethod def check_token(token): #用同样的字符串生成构造token时完全一样的实例化对象。 s=Seralize(current_app.config['SECRET_KEY']) #在能得到token的情况下try try: #用实例化对象解析邮箱传递给路由的token。得到Dict。 Dict=s.loads(token) #取出Dict的id。 id=Dict['id'] #查找数据库中是否存在这个id,如果存在,u为True,否则为Flase。 u=User.query.get(id) if not u: #如果不存在,抛出错误,不再执行后续代码。 raise ValueError #得不到token就except except: #得不到token就返回错误 return False #得到了token,并且解析到数据库中有对应的id。并且激活状态为Flase时,执行下列代码。 if not u.confirm: #更改激活状态并保存 u.confirm = True u.save() #随便返回一个真值,让其他情况下代码正常运行。 return True
class User(UserMixin, Base, db.Model): __tablename__ = 'user' id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(12), index=True, unique=True) password_hash = db.Column(db.String(128)) sex = db.Column(db.Boolean, default=True) age = db.Column(db.Integer, default=18) email = db.Column(db.String(50), unique=True) #邮箱 icon = db.Column(db.String(70), default='default.jpg') #头像 lastLogin = db.Column(db.DateTime) #上次登录时间 registerTime = db.Column(db.DateTime, default=datetime.utcnow) #注册时间 confirm = db.Column(db.Boolean, default=False) #激活状态 默认不激活 @property def password(self): raise AttributeError @password.setter def password(self, password): self.password_hash = generate_password_hash(password) #检测密码正确性 def check_password(self, password): return check_password_hash(self.password_hash, password) #token值的生成 def generate_token(self): s = Seralize(current_app.config['SECRET_KEY']) #生成token对象 return s.dumps({'id': self.id}) #通过给定字典生成token字符串 #账户的激活 @staticmethod def check_token(token): try: s = Seralize(current_app.config['SECRET_KEY']) # 生成token对象 id = int(s.loads(token)['id']) #通过token值加载出字典 u = User.query.get(id) #拿到访问者的对象 u.confirm = True #修改激活状态 u.save() #保存 return True except: return False def __str__(self): return self.username
class User(UserMixin, db.Model): __tablename__ = 'user' id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(12), index=True) password_hash = db.Column(db.String(128)) sex = db.Column(db.Boolean, default=True) age = db.Column(db.Integer) email = db.Column(db.String(40)) icon = db.Column(db.String(70), default='default.jpg') #当期账户激活状态 confirm = db.Column(db.Boolean, default=False) @property def password(self): raise ValueError @password.setter def password(self, password): self.password_hash = generate_password_hash(password) #生成token的方法 def generate_token(self): s = Seralize(current_app.config['SECRET_KEY']) return s.dumps({'id': self.id}) #检测token的方法 @staticmethod def check_token(token): s = Seralize(current_app.config['SECRET_KEY']) # print(s) #从当前的token中拿出字典 try: id = s.loads(token)['id'] except: return False u = User.query.get(id) if not u: return False if not u.confirm: print(u.confirm) u.confirm = True print(u.confirm) db.session.add(u) return True #验证密码 def check_password_hash(self, password): return check_password_hash(self.password_hash, password)
class Students(db.Model): # 表名 # 默认情况 # 类名 大写变小写,第二个大写字母前面加下划线 students # StudentModel student_model __tablename__ = 'students' # 主键 如果设置为主键 ,就默认自动增长 id = db.Column(db.Integer(), primary_key=True, autoincrement=True) # 学生名 stu_name = db.Column(db.String(32), nullable=False) # 学号 stu_num = db.Column(db.String(8), nullable=False) # 性别 stu_sex = db.Column(db.Boolean, default=True) # 年龄 stu_age = db.Column(db.SmallInteger, default=18) # 爱好 hobby = db.Column(db.String(64)) # print 输出 # def __str__(self): # return self.stu_name def __repr__(self): return self.stu_name
class Course(db.Model, Base): __tablename__ = 'course' id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(23), index=True) abstract = db.Column(db.Text) pid = db.Column(db.Integer, default=0) path = db.Column(db.Text, default='0,') timestamp = db.Column(db.DateTime, default=datetime.utcnow())
class User(UserMixin, Base, db.Model): __tablename__ = 'user' id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(12), index=True, nullable=False, unique=True) password_hash = db.Column(db.String(128)) email = db.Column(db.String(50), unique=True) icon = db.Column(db.String(70), default='default.jpg') lastLogin = db.Column(db.DateTime) registerTime = db.Column(db.DateTime, default=datetime.utcnow) confirm = db.Column(db.Boolean, default=True) favorites = db.relationship('Movie', secondary='collections', backref=db.backref('users', lazy='dynamic'), lazy='dynamic') @property def password(self): raise AttributeError @password.setter def password(self, password): self.password_hash = generate_password_hash(password) def check_password(self, password): return check_password_hash(self.password_hash, password) def is_favorite(self, pid): favorites = self.favorites.all() for i in favorites: if i.id == pid: return True return False def add_favorite(self, pid): self.favorites.append(Movie.query.get(pid)) db.session.commit() def remove_favorite(self, pid): self.favorites.remove(Movie.query.get(pid)) db.session.commit() def __str__(self): return self.username
class Posts(db.Model): __tablename__ = 'posts' id = db.Column(db.Integer, primary_key=True) content = db.Column(db.Text) pid = db.Column(db.Integer, default=0) path = db.Column(db.String(255), default='0,') #记录时间的 timestamp = db.Column(db.DateTime, default=datetime.utcnow) #user的外键 uid = db.Column(db.Integer, db.ForeignKey('user.id'))
class User(UserMixin, db.Model): __tablename__ = 'user' id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(13), unique=True) password_hash = db.Column(db.String(128)) age = db.Column(db.Integer, default=18) sex = db.Column(db.Boolean, default=True) email = db.Column(db.String(128)) icon = db.Column(db.String(64), default='default.jpg') confirm = db.Column(db.Boolean, default=False) @property def password(self): raise ArithmeticError('属性不存在') @password.setter def password(self, password): self.password_hash = generate_password_hash(password) def generate_token(self): s = Seralize(current_app.config['SECRET_KEY']) return s.dumps({'id': self.id}) @staticmethod def check_token(token): try: s = Seralize(current_app.config['SECRET_KEY']) Dict = s.loads(token) uid = Dict['id'] u = User.query.get(uid) if not u: raise ValueError except: return False if not u.confirm: u.confirm = True db.session.add(u) return True def check_password(self, password): return check_password_hash(self.password_hash, password)
from .user import User from .posts import Posts from App.extensions import db # 创建多对多中间表 存储多对多的id collections = db.Table( 'collections', db.Column('user_id', db.Integer, db.ForeignKey('user.id')), db.Column('posts_id', db.Integer, db.ForeignKey('posts.id')), )
class Categorys(DB_Base, db.Model): __tablename__ = 'categorys' id = db.Column(db.Integer, primary_key=True) categorys = db.Column(db.String(20), index=True, unique=True)
from App.extensions import db from .db_base import DB_Base from datetime import datetime posts_categorys = db.Table( 'posts_categorys', db.Column('posts_id', db.Integer, db.ForeignKey('posts.id'), primary_key=True), db.Column('categorys_id', db.Integer, db.ForeignKey('categorys.id'), primary_key=True)) # 博客模型 class Posts(DB_Base, db.Model): __tablename__ = 'posts' id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(20), index=True) # 标题 article = db.Column(db.Text) # md格式正文 pid = db.Column(db.Integer, default=0) # 父id path = db.Column(db.Text, default='0,') # 路径 visit = db.Column(db.Integer, default=0) # 文章访问量 timestamp = db.Column(db.DateTime, default=datetime.utcnow) # 发表时间 state = db.Column(db.Integer, default=0) # 是否所有人可见 img = db.Column(db.String(70)) # 图片 tags = db.relationship('Categorys', secondary=posts_categorys,
class ResourceMixin(object): # Keep track when records are created and updated. created_on = db.Column(AwareDateTime(), default=tzware_datetime) updated_on = db.Column(AwareDateTime(), default=tzware_datetime, onupdate=tzware_datetime) @classmethod def sort_by(cls, field, direction): """ Validate the sort field and direction. :param field: Field name :type field: str :param direction: Direction :type direction: str :return: tuple """ if field not in cls.__table__.columns: field = 'created_on' if direction not in ('asc', 'desc'): direction = 'asc' return field, direction @classmethod def get_bulk_action_ids(cls, scope, ids, omit_ids=[], query=''): """ Determine which IDs are to be modified. :param scope: Affect all or only a subset of items :type scope: str :param ids: List of ids to be modified :type ids: list :param omit_ids: Remove 1 or more IDs from the list :type omit_ids: list :param query: Search query (if applicable) :type query: str :return: list """ omit_ids = map(str, omit_ids) if scope == 'all_search_results': # Change the scope to go from selected ids to all search results. ids = cls.query.with_entities(cls.id).filter(cls.search(query)) # SQLAlchemy returns back a list of tuples, we want a list of strs. ids = [str(item[0]) for item in ids] # Remove 1 or more items from the list, this could be useful in spots # where you may want to protect the current user from deleting themself # when bulk deleting user accounts. if omit_ids: ids = [id for id in ids if id not in omit_ids] return ids @classmethod def bulk_delete(cls, ids): """ Delete 1 or more model instances. :param ids: List of ids to be deleted :type ids: list :return: Number of deleted instances """ delete_count = cls.query.filter( cls.id.in_(ids)).delete(synchronize_session=False) db.session.commit() return delete_count def save(self): """ Save a model instance. :return: Model instance """ db.session.add(self) db.session.commit() return self def delete(self): """ Delete a model instance. :return: db.session.commit()'s result """ db.session.delete(self) return db.session.commit() def __str__(self): """ Create a human readable version of a class instance. :return: self """ obj_id = hex(id(self)) columns = self.__table__.c.keys() values = ', '.join("%s=%r" % (n, getattr(self, n)) for n in columns) return '<%s %s(%s)>' % (obj_id, self.__class__.__name__, values)
class EconomicNews(db.Model): __table_args__ = { 'schema': config_map['postgresql']['schema'] } id=db.Column(db.Integer,primary_key=True) title=db.Column(db.String(256)) content=db.Column(db.Text) link=db.Column(db.String(2048)) publish_date=db.Column(db.DateTime) type=db.Column(db.String(256)) keywords=db.Column(db.String(2048)) create_date=db.Column(db.DateTime) create_by=db.Column(db.Integer) update_date = db.Column(db.DateTime) update_by = db.Column(db.DateTime) def save(self): db.session.add(self) db.session.commit() def to_json(self): dict = self.__dict__ if "_sa_instance_state" in dict: del dict["_sa_instance_state"] return dict