首页 > 其他 > 详细

4.ORM框架的查询

时间:2019-03-16 21:27:11      阅读:161      评论:0      收藏:0      [点我收藏+]

创建表对应关系代码如下:

from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy

app=Flask(__name__)
app.config[SQLALCHEMY_DATABASE_URI]="mysql://root:123456@127.0.0.1:3306/rupeng"
app.config[SQLALCHEMY_TRACK_MODIFICATIONS]=False

db=SQLAlchemy(app)

# 角色 1的一方
class Role(db.Model):
    __tablename__="role"
    id=db.Column(db.Integer,primary_key=True)
    name=db.Column(db.String(20),unique=True)
    # backref在这行代码的作用是:给前面的User添加一个属性,名字叫做backref的值
    # 以便可以直接通过user.role方法到一的一方的数据
    users=db.relationship("User",backref="role")
    def __repr__(self):
        return "%d,%s" %(self.id,self.name)

# 用户 多的一方
class User(db.Model):
    __tablename__="users"
    id=db.Column(db.Integer,primary_key=True)
    name=db.Column(db.String(64),unique=True)
    email=db.Column(db.String(64),unique=True)
    password=db.Column(db.String(64))
    # 设置外键 ,为了能够直接查询出一的一方的数据
    role_id=db.Column(db.Integer,db.ForeignKey(Role.id))

    def __repr__(self):
        return "%d %s" %(self.id,self.name)

@app.route("/")
def index():
    return "index"

if __name__ == __main__:
    db.drop_all()
    db.create_all()

    ro1 = Role(name=admin)
    db.session.add(ro1)
    db.session.commit()
    # 再次插入一条数据
    ro2 = Role(name=user)
    db.session.add(ro2)
    db.session.commit()

    us1 = User(name=wang, email=wang@163.com, password=123456, role_id=ro1.id)
    us2 = User(name=zhang, email=zhang@189.com, password=201512, role_id=ro2.id)
    us3 = User(name=chen, email=chen@126.com, password=987654, role_id=ro2.id)
    us4 = User(name=zhou, email=zhou@163.com, password=456789, role_id=ro1.id)
    us5 = User(name=tang, email=tang@itheima.com, password=158104, role_id=ro2.id)
    us6 = User(name=wu, email=wu@gmail.com, password=5623514, role_id=ro2.id)
    us7 = User(name=qian, email=qian@gmail.com, password=1543567, role_id=ro1.id)
    us8 = User(name=liu, email=liu@itheima.com, password=867322, role_id=ro1.id)
    us9 = User(name=li, email=li@163.com, password=4526342, role_id=ro2.id)
    us10 = User(name=sun, email=sun@163.com, password=235523, role_id=ro2.id)
    db.session.add_all([us1, us2, us3, us4, us5, us6, us7, us8, us9, us10])
    db.session.commit()

    app.run(debug=True)

查询语句如下:

"""
        查询所有用户数据
         User.query.all()

        查询有多少个用户
        User.query.count()

        查询第1个用户
        User.query.first()

        查询id为4的用户[3种方式]
        User.query.get(4)
        User.query.filter_by(id=4).first()
        User.query.filter(User.id==4).first()

        查询名字结尾字符为g的所有数据[开始/包含]
        User.query.filter(User.name.endswith(‘g‘)).all()
        User.query.filter(User.name.contains(‘g‘)).all()
        User.query.filter(User.name.startswith(‘g‘)).all()

        查询名字不等于wang的所有数据[2种方式]
        第一种方式:导入from sqlalchemy import not_
        User.query.filter(not_(User.name==‘wang‘)).all()
        第二种方式:User.query.filter(User.name!=‘wang‘).all()

        查询名字和邮箱都以 li 开头的所有数据[2种方式]
        第一种方式:User.query.filter(User.name.startswith(‘li‘),User.email.startswith(‘li‘)).all()
        第二种方式:导入:from sqlalchemy import and_
        User.query.filter(and_(User.name.startswith(‘li‘),User.name.startswith(‘li‘))).all()

        查询password是 `123456` 或者 `email` 以 `itheima.com` 结尾的所有数据
        导入:from sqlalchemy import or_
        User.query.filter(or_(User.password==‘123456‘,User.email.endswith(‘itheima.com‘))).all()

        查询id为 [1, 3, 5, 7, 9] 的用户列表
        User.query.filter(User.id.in_([1,3,5,7,9])).all()

        查询name为liu的角色数据
         User.query.filter(User.name==‘liu‘).first().role

        查询所有用户数据,并以邮箱排序
        User.query.order_by(User.email).all()或User.query.order_by(User.email.asc()).all()
        User.query.order_by(User.email.desc()).all()

        每页3个,查询第2页的数据
        paginate=User.query.paginate(2,3)  第一个参数表示查询第几页,第二个参数表示煤业查询几个参数
        paginate.items
        总页数
        paginate.pages
        当前页
        paginate.page
        """

 

4.ORM框架的查询

原文:https://www.cnblogs.com/fjiqiang/p/10544384.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!