- 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 版本号