flask框架3(数据库ORM)

  • ORM
    • 对象关系映射,主要实现模型对象到关系数据库数据的映射
    • 优点:面向对象编程,对数据库的操作都转化成对类属性和方法的操作,不用编写各种数据库的sql语句
    • 数据模型与数据库的解耦,不在关注用的是mysql、oracle...等,通过简单的配置就可以轻松更换数据库, 而不需要修改代码
    • 缺点是会有性能损失
  • Flask-SQLAlchemy
    • 安装,这里链接mysql:
      • pip install flask-sqlalchemy
      • pip install flask-mysqldb 如果安装报错使用sudo apt-get install python3.5-dev
    • 配置:
      • 必要的链接配置 app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://用户名:密码@127.0.0.1:3306/要连接的数据库名'
      • 其他配置
        • 动态追踪修改设置,如未设置只会提示警告 app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
        • 查询时会显示原始SQL语句 app.config['SQLALCHEMY_ECHO'] = True
  • 使用
db = SQLAlchemy(app)
class User(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    name = db.Column(db.String(50),nullable=False)
    age = db.Column(db.Integer)
  • 增删查改
    • 表增删
      • db.drop_all()
      • db.create_all()
    • 插入一条数据
      • data1 = User(name='xxx',age=11)
      • db.session.add(data1)
      • db.session.commit()
    • 插入多条
      • db.session.add_all([列表])
      • db.session.commit()
    • 查询
      • User.query.get(1) 返回指定主键对应的行,如不存在,返回None
      • User.query.all() 以列表形式返回查询的所有结果
      • User.query.first() 查询第一个
      • User.query.count() 返回查询结果的数量
      • User.query.filter_by(name='xxx').all() 返回名字等于xxx的所有人
      • User.query.filter(User.name=='xxx').first() 返回名字等于xxx的第一个人,使用filter必须指明熟悉来自哪个类,且用==连接
      • User.query.filter(User.name.endswith('x')).all() 返回名字结尾字符为x的所有数据 (开始startswith/包含contains)
      • User.query.filter(User.name.startswith('x'), User.age.startswith('2')).all() 查询名字x开头和年龄2开头的所有人
        另外一种写法:User.query.filter(and_(User.name.startswith('x'), User.age.startswith('2'))).all()
      • 使用and_ not_ or_必须要导入 from sqlalchemy import and_,not_,or_
        • and_(1,2) 1和2两个条件都成立
        • or_(1,2) 1或者二任一成立
        • not_() 取反
      • User.query.filter(User.id.in_([1,3,5,7,9])).all() 查询id为 [1, 3, 5, 7, 9] 的所有数据 包含:in_([])
      • User.query.order_by(User.age.desc()).all() 按年龄排序 desc:降序 aesc: 升序
      • 分页:pag = User.query.paginate(2, 3) 将所有数据分页,查询第二页的数据,每页三条
      • pag.items 获取当前页码的所有数据
      • pag.page 获取当前页码
      • pag.pages 获取总页数
  • 数据库迁移
    • 需要使用第三方包flask_script和flask_migrate from flask_script import Manager from flask_migrate import Migrate,MigrateCommand
    • 迁移代码配置:
      • 1.配置数据库及创建flask和数据库对象
      • 2.创建迁移对象 migrate = Migrate(app,db) 这里传入flask对象和数据库对象
      • 3.创建管理对象 manager = Manager(app) 使用flask_script的Manager管理app
      • 4.添加迁移命令到管理对象 manager.add_command('add_db',MigrateCommand) 使add_db作为命令行的迁移命令使用
      • 5.使用manager.run()运行程序
    • 迁移步骤:
      • 1.初始化迁移操作:进入命令行,输入python3 py文件名.py add_db init
      • 2.创建迁移脚本并记录当前版本号:输入python3 py文件名.py add_db migrate -m '此处输入版本标记,注释'
      • 3.更新数据库,迁移确认:输入python3 py文件名.py add_db upgrade
    • 注意只需要第一次迁移时需要初始化操作,后续如果有修改直接操作2,3步即可
    • 如果要回滚版本,可以使用python3 py文件名.py add_db history命令查看历史版本号
    • 回滚版本使用命令python3 py文件名.py add_db downgrade 版本号

转载于:https://www.cnblogs.com/being-a-tester/p/10431622.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值