flask day04

2019-03-07  本文已影响0人  水果坚果燕麦片
ORM概念: object relationship mapping,对象关系映射

views.py

"""__author__ = song"""

from flask import Blueprint
from sqlalchemy import and_, not_, or_

from app.models import db, Student

blue = Blueprint('app',__name__)

@blue.route('/')
def hello():
    return 'hello world'

@blue.route('/creat_db/')
def create_db():
    # 第一次迁移模型时才有用
    db.create_all()
    # db.drop_all()
    return '创建表成功'

@blue.route('/add_stu/')
def add_stu():
    stu = Student()
    stu.s_name = 'zzz'
    stu.age = 20
    db.session.add(stu)
    db.session.commit()
    return '创建数据成功'

@blue.route('/add_stus/')
def add_stus():
    stu_list = []
    for i in range(10):
        stu = Student()
        stu.s_name = 'zqm' + str(i)
        stu.age = int(i)
        stu_list.append(stu)
        # db.session.add(stu)
    db.session.add_all(stu_list)
    db.session.commit()
    return '批量插入数据'

@blue.route('/sel_stu/')
def sel_stu():
    # stu: <flask_sqlalchemy.BaseQuery object at 0x0000016D7C6EED68>
    stu = Student.query.filter_by(s_name = 'zqm0').first()
    print(stu.s_name)
    print(stu.age)
    return '查询成功'

@blue.route('/del_stu/')
def del_stu():
    stus = Student.query.filter_by(age=0).all()
    for stu in stus:
        db.session.delete(stu)
    db.session.commit()
    return '删除成功'

@blue.route('/update_stu/')
def update_stu():
    # 修改,先获取需要修改的对象
    stu = Student.query.filter_by(s_name='zzz').first()
    stu.age = 10
    stu.save()
    return '修改成功'

@blue.route('/sel_stus/')
def sel_stus():
    # stu = Student.query.filter_by(s_name='zzz').first()
    stu = Student.query.filter(Student.s_name =='zzz').first()
    print(stu)

    # all()结果为列表,列表中的元素是查询学生的对象
    stus = Student.query.all()
    print(stus)

    stu = Student.query.filter(Student.id == 1).first()
    # get查询主键所在行的信息
    stu = Student.query.get(1)
    print(stu)

    # order by
    stus = Student.query.order_by(-Student.id).all()
    print(stus)
    stus = Student.query.limit(3).all()
    print(stus)
    page = 1
    stus = Student.query.offset((page-1)*3).limit(3).all()
    print(stus)

    # 模糊查询
    stus = Student.query.filter(Student.s_name.contains('z')).all()
    print(stus)
    stus = Student.query.filter(Student.s_name.like('z%')).all()

    stus = Student.query.filter(Student.s_name.startswith('z')).all()
    stus = Student.query.filter(Student.s_name.endswith('m')).all()

    # 大于gt 小于lt 大于等于ge 小于等于le
    stus = Student.query.filter(Student.age.__ge__(10)).all()
    stus = Student.query.filter(Student.age >= 10).all()

    # where id in [1,2,3,4,5,6,7]
    stus = Student.query.filter(Student.id.in_([1,2,3,4,5,6,7])).all()
    stus = Student.query.filter(Student.id.notin_([1, 2, 3, 4, 5, 6, 7])).all()
    print(stus)

    stus = Student.query.filter(Student.age == 2).filter(Student.s_name.like("z%")).all()

    # and or
    stus = Student.query.filter(Student.age == 2, Student.s_name.like("z%")).all()
    stus = Student.query.filter(Student.age == 2 or Student.s_name.like("z%")).all()
    print(stus)
    # and_, or_, not_
    stus = Student.query.filter(and_(Student.age == 2, Student.s_name.like("z%"))).all()
    stus = Student.query.filter(or_(Student.age == 2,Student.s_name.like("z%"))).all()
    stus = Student.query.filter(not_(Student.s_name.like("z%"))).all()
    
    return '查询学生信息'

models.py

"""__author__ = song"""

from flask_sqlalchemy import SQLAlchemy

# 生成数据库访问对象db
db = SQLAlchemy()

class Student(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    s_name = db.Column(db.String(10), unique=True, nullable=False)
    age = db.Column(db.Integer, default=20)

    __tablename__ = 'stu'

    def save(self):
        db.session.add(self)
        db.session.commit()

    def delete(self):
        db.session.delete(self)
        db.session.commit()

manage.py

"""__author__ = song"""
from flask import Flask
from flask_script import Manager

from app.models import db
from app.views import blue

app = Flask(__name__)
app.register_blueprint(blueprint=blue)

# 配置数据库连接信息

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:你的本地数据库密码@127.0.0.1:3306/flask9'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db.init_app(app)

manage = Manager(app)

if __name__ == '__main__':
    manage.run()
上一篇下一篇

猜你喜欢

热点阅读