基于Python Flask-Sqlalchemy的查询大全

查:

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

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注