本文共 5246 字,大约阅读时间需要 17 分钟。
# 根据现有的表结构构建模型类class Users(db.Model): __tablename__ = "users" id = db.Column(db.Integer,primary_key=True) username = db.Column(db.String(80),unique=True) age = db.Column(db.Integer) email = db.Column(db.String(120),unique=True) def __init__(self,username,age,email): self.username = username self.age = age self.email = email def __repr__(self): return "" % self.username
# 强制删除所有模型对应的表db.drop_all()# 将所有模型映射到数据库db.create_all()# 向表中插入一条记录@app.route('/insert')def insert_views(): user = Users('Paris',18,'Paris@gmail.com') db.session.add(user) return "Insert OK"
# 查询路由@app.route('/query')def query_views(): # 测试查询 print(db.session.query(Users)) print(db.session.query(Users.username,Users.email)) print(db.session.query(Users,Course)) # 通过查询执行函数获得最终查询结果 # all() : 得到查询中所有的结果 users = db.session.query(Users).all() for u in users: print(u.username,u.age,u.email) # first() : 得到查询中的第一个结果 user = db.session.query(Users).first() print(user.username,user.age,user.email) course = db.session.query(Course).first() print(course) # 使用查询过滤器函数对数据进行筛选 # 查询年龄大于30的Users的信息 users = db.session.query(Users).filter(Users.age>30).all() print(users) # 查询年龄大于30并且id大于5的Users的信息 users = db.session.query(Users).filter(Users.age>30,Users.id > 5).all() print(users) # 查询年龄大于30 或者 id大于 5 的Users的信息 users = db.session.query(Users).filter(or_(Users.age>30,Users.id > 5)).all() print(users) # 查询email中包含字符'w'的用户的信息 users = db.session.query(Users).filter(Users.email.like('%w%')).all() print(users) # 查询id在1,2,3 之间的 用户的信息 users = db.session.query(Users).filter(Users.id.in_([1,2,3])).all() print(users) # 查询 Users 表中所有数据的前3条 users = db.session.query(Users).limit(3).all() users = db.session.query(Users).limit(3).offset(1).all() # 查询Users表中所有的数据,并按照id倒叙排序 users = db.session.query(Users).order_by('id desc,age asc') print(users) # 查询Users表中所有的数据,并按照 age 进行分组 users = db.session.query(Users).group_by('id').all() print(users) # 基于Models实现的查询 : 查询id>3的所有用户的信息 users = Users.query.filter(Users.id>3).all() print(users) return "Query OK"
@app.route('/delete_user')def delete_user(): # 查询并去除id=5的第一条记录 user = Users.query.filter_by(id=5).first() # 将改记录删除 db.session.delete(user) return 'Delete OK'
@app.route('/update_user')def update_user(): # 查询id=1的第一条记录并取出 user = Users.query.filter_by(id=1).first() # 将username改为巴黎 user.username = "巴黎" # 将年龄改为17 user.age = 17 # 将数据重新插入回数据库 如果该数据纯在则更新如果不存在则创建 db.session.add(user) return "Update OK"
class Course(db.Model): __tablename__ = "course" id = db.Column(db.Integer,primary_key=True) cname = db.Column(db.String(30)) #反向引用: # 返回与当前课程相关的teacher列表 #backref: # 定义反向关系,本质上会向Teacher实体中增加一个 # course属性.该属性可替代course_id来访问 # Course模型.此时获得到的是模型对象,而不是外键值 teachers=db.relationship('Teacher',backref='course') def __init__(self,cname): self.cname = cnameclass Teacher(db.Model): __tablename__='teacher' id = db.Column(db.Integer,primary_key=True) tname = db.Column(db.String(30)) tage = db.Column(db.Integer) # 增加一列 : course_id,外键列,要引用自主键表(course)的主键列(id) course_id = db.Column(db.Integer,db.ForeignKey('course.id')) def __init__(self,tname,tage): self.tname = tname self.tage = tage def __repr__(self): return "" % self.tname
转载地址:http://mexsa.baihongyu.com/