查:
result = User.query.filter(User.name==’test’).all() # 查找所有的名字为’test’的数据
result = User.query.filter_by(name=’test’).all() # 同上,注意写法的不同
result = User.query.filter(User.name != ‘test).all() # 查找所有名字不为’test’的数据
result = User.query.filter(User.name.like(‘test’).all() # 查找所有名字中包含’test’用户
result = User.query.filter(User.name.ilike(‘test’).all() #查找所有名字中包含’test’用户,不区分大小写
result = User.query.filter(User.name.notlike(‘test’).all() #查找所有名字中不包含’test’用户
result = User.query.filter(User.name.in_([‘test’,’test1′]).all() # 查找所有名字为test和test1的用户
result = User.query.filter(~User.name.in_([‘test’,’test1′]).all() # 查找所有名字不为test和test1的用户
result = User.query.filter(User.name.notin_([‘test’,’test1′]).all() # 同上,另一种写法
result = User.query.filter(User.name == None).all() #查找所有名字为空的用户
result = User.query.filter(User.name.is_(None)).all() #同上,另一种写法
result = User.query.filter(User.name != None).all() #查找所有名字不i为空的用户
result = User.query.filter(User.name.isnot(None)).all() #同上,另一种写法
# and
result = User.query.filter(User.name == “test”).filter(User.level == 1).all() 两个条件,and
result = User.query.filter(User.name == “test”, User.level == 1).all() 同上,另一种写法
result = User.query.filter(and_(User.name == “test”, User.level == 1)).all() 同上,另一种写法
注意不要用User.name == “test” and User.level == 1这样写,不会报错,但会忽略后者条件,造成意想不到结果
# or
result = User.query.filter(or_(User.name == “test”, User.level == 1)).all() 两个条件有一个条件成立即可
# 字符串
result = User.query.filter(User.name.endswith(‘t’)).all() # endswith,以xx为结果,同样还有startswith
# 排序
result = User.query.filter(User.name == “test”).order_by(User.id.desc()).all() # 查询结果以降序排列
result = User.query.filter(User.name == “test”).order_by(User.id.asc()).all() # 查询结果以升序排列
# 数据在某值中间
result = User.query.filter(User.age.between(10,60)).all() # 查询年龄在10-60之间
# 去重
result = User.query.filter(User.name == “test”).distinct().all()
# 得到数量
result = User.query.filter(User.name == “test”).count()
# 限位与起始位
result = User.query.filter(User.name == ‘test’).limit(20).offset(10).all() # 从第10条记录开始的共20条记录
# 复杂查询
# 选出几项
result = User.query.with_entities(User.name, User.phone).filter(User.name==”test”).all()
# join
User.query.join(People.id)
#外键
定义时增加外键的定义
class Article(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
title = db.Column(db.String(50), nullable=False)
user_id = db.Column(db.Integer, db.ForeignKey(‘user.id’), nullable=False)
class User(db.Model):
id = db.Column(db.Integer,primary_key=True,autoincrement=True)
username = db.Column(db.String(15),nullable=False)
#增加一个字段 ,以及反向引用。这个字段与数据库字段无关,是在引用过来的时候引用回去用的。
articles =db.relationship(‘Article’,backref =’user’ )
#使用,反向
user = User.query.get(3)
for article in user.articles:
article.idarticle.title
#使用,正向
article = Article.query.first()
article.user.name