• Flask(四)


    Flask操作数据库:

    需要提前安装:flask_sqlalchemy,(pip install flask_sqlalchemy)如果连接的是mysql数据库,需要安装mysqldb驱动;(pip install flask_mysqldb)

    一对多:

    代码如下:

    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy


    class Config(object):
    """项目配置类"""
    # 连接数据库
    # mysql://数据库的账号:密码/数据库ip地址:端口号/数据库名称
    SQLALCHEMY_DATABASE_URI = "mysql://root:123456@127.0.0.1:3306/py18"
    # 跟踪数据库修改操作
    SQLALCHEMY_TRACK_MODIFICATIONS = True


    # 1:创建app对象
    app = Flask(__name__)
    # 加载项目配置
    app.config.from_object(Config)
    # 创建数据库对象
    db = SQLAlchemy(app)


    # 定义数据库表模型类
    class User(db.Model):
    # 设置表名称,不设置默认为类名的小写字母(user)
    __tablename__ = "users"
    # 定义字段
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(128), unique=True)
    # role = Role()
    # role.users:该角色下有哪些用户
    # user=User()
    # user.roles:该用户属于那种角色

    # 定义关系字段relationship,这个字段在数据库是不存在的,只是为了方便查询
    roles = db.relationship("Role", backref="users")

    def __repr__(self):
    """自定义格式化输出"""
    return "Role: %s %s" % (self.id, self.name)


    # 自定义数据库表的模型类:db.Model
    class Role(db.Model):
    __tablename__ = "role"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(128), unique=True)
    # 定义外键
    role_id = db.Column(db.Integer, db.ForeignKey(User.id))

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


    @app.route("/")
    def hello_world():
    return "hello world!"


    if __name__ == '__main__':
    # 删除所有表
    db.drop_all()
    # 创建所有表
    db.create_all()
    app.run(debug=True)

    多对多:

    代码如下:

    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy


    class Config(object):
    """项目配置类"""
    # 连接数据库
    # mysql://数据库的账号:密码/数据库ip地址:端口号/数据库名称
    SQLALCHEMY_DATABASE_URI = "mysql://root:123456@127.0.0.1:3306/py18"
    # 跟踪数据库修改操作
    SQLALCHEMY_TRACK_MODIFICATIONS = True


    # 1:创建app对象
    app = Flask(__name__)
    # 加载项目配置
    app.config.from_object(Config)
    # 创建数据库对象
    db = SQLAlchemy(app)

    # 定义第三张表
    tb_user_role = db.Table("tb_user_role",
    db.Column("user_id", db.Integer, db.ForeignKey("user.id")),
    db.Column("role_id", db.Integer, db.ForeignKey("role.id"))
    )


    # 定义数据库表模型类
    class User(db.Model):
    # 设置表名称,不设置默认为类名的小写字母(user)
    __tablename__ = "user"
    # 定义字段
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(128), unique=True)
    # role = Role()
    # role.users:该角色下有哪些用户
    # user=User()
    # user.roles:该用户属于那种角色

    # 定义关系字段relationship,这个字段在数据库是不存在的,只是为了方便查询
    # TODO 添加第三张表
    # secondary 指明第三张表, lazy提高性能,值返回结果对象,需要获取数据时需要".all()"才会展示出来
    roles = db.relationship("Role",
    backref="user",
    secondary=tb_user_role,
    lazy="dynamic")

    def __repr__(self):
    """自定义格式化输出"""
    return "Role: %s %s" % (self.id, self.name)


    # 自定义数据库表的模型类:db.Model
    class Role(db.Model):
    __tablename__ = "role"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(128), unique=True)
    # 定义外键
    role_id = db.Column(db.Integer, db.ForeignKey(User.id))

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


    @app.route("/")
    def hello_world():
    return "hello world!"


    if __name__ == '__main__':
    # 删除所有表
    db.drop_all()
    # 创建所有表
    db.create_all()
    app.run(debug=True)



    //////////////////////////////////////////////////////////
    数据常用查询操作
    from flask_sqlalchemy import SQLAlchemy
    from flask import Flask
    from sqlalchemy import not_, and_, or_


    class Config(object):
    """项目配置类"""
    SQLAlCHEMY_DATABASE_URI = "mysql://root:123456@127.0.0,1:3306/test18"
    SQLALCHEMY_TRACK_MODIFICATIONS = True


    app = Flask(__name__)
    app.config.from_object(Config)
    db = SQLAlchemy(app)


    class Role(db.Model):
    """角色表"""
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(128), unique=True)
    users = db.relationship("User", backref="role")
    def __repr__(self):
    return "Role:%s %s" %(self.id, self.name)

    class User(db.Model):
    id= db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(128), unique=True)
    email = db.Column(db.String(64))
    password = db.Column(db.String(64))
    # 定义外键
    role_id = db.Column(db.Integer, db.ForeignKey(Role.id))

    def __repr__(self):
    return "User:%s %s %s %s" %(self.id, self.name, self.email, self.role_id)

    @app.route("/")
    def hello_world():
    return "hello world"


    if __name__ == '__main__':
    # 删除所有表
    db.drop_all()
    # 创建所有表
    db.create_all()
    # 单次插入数据
    ro1 = Role(name="admin")
    ro2 = Role(name="user")
    db.session.add_all([ro1, 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() # 查询所有用户数据 User.query.all() # 查询有多少个用户 User.query.count() # 查询id为4的用户[3种方式] User.query.get(4) # filter_by精确查询 User.query.filter_by(id=4).first() User.query.filter(User.id == 4).first() # 查询名字结尾字符为g的所有数据[开始startswith/包含contains] User.query.filter(User.name.endswith("g")).all() User.query.filter(User.name.contains("g")).all() # 查询名字不等于wang的所有数据[2种方式] User.query.filter(User.name != "wang").all() User.query.filter(not_(User.name == "wang")).all() # 查询名字和邮箱都以"li"开头的所有数据[2种方式] User.query.filter(User.name.startswith('li'), User.email.startswith('li')) User.query.filter(and_(User.name.startswith("li"), User.email.startswith("li"))) # 查询password是"123456"或者"email"以"itheima.com"结尾的邮箱 User.query.filter(or_(User.password == "123456", User.email.endswith("itheima.com"))) # 查询id为[1,3,5,7,9]的用户列表 # 使用in_()包含函数 User.query.filter(User.id in([1,3,5,7,9])).all() # 查询name为liu的数据 User.query.filter(User.name =="liu").first() # 查询所有用户数据,并以邮箱降序排列 User.query.filter(User.email.desc()).all() # 将所有数据分页,每页3个,查询第二页的数据 # 参数1:第几页的数据, 参数2:每页多少条数据 paginate = User.query.paginate(2, 3) # 获取当前页面所有数据 paginate.items # 获取当前页码 paginate.page # 获取总页数 paginate.pages app.run(debug=True)

























  • 相关阅读:
    Spring MVC @PathVaribale注解
    Android XML解析并将数据存放在数据库中
    Android平台SoundPool 和 MediaPlayer
    Android编程获取网络连接状态(3G/Wifi)及调用网络配置界面
    程序员必备的七大面向对象设计原则(二)
    Android setRequestedOrientation用法
    Linux系统IP路由基础[第1部分]
    Android中解析XML
    Android学习笔记(6)————Android的线程与进程
    Eclipse最全快捷键
  • 原文地址:https://www.cnblogs.com/zhouzetian/p/9692424.html
Copyright © 2020-2023  润新知