Flask-SQLAlchemy
Flask-SQLAlchemy是在Flask中操作关系型数据库的拓展。是以面向模型对象的形式操作数据库,通过迁移完成建表
安装
pip install flask-sqlalchemy
基本配置
from flask_sqlalchemy import SQLAlchemy
# 配置数据库访问链接
app.config['SQLALCHEMY_DATABASE_URI']="mysql://root:mysql@127.0.0.1:3306/demo"
# 设置是否追踪数据库的增删改查,会有显著的开销,一般设置为False
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = Flase
# 创建SQLAlchemy对象,,并与当前数据库关联,TCP连接
db = SQLAlchemy(app)
from flask_sqlalchemy import SQLAlchemy
class Config(object):
DEBUG = True
SQLALCHEMY_DATABASE_URI = "mysql://root:mysql@127.0.0.1:3306/demo1"
SQLALCHEMY_TRACK_MODIFICATIONS = False
app = Flask(__name__)
app.config.from_object(Config)
注意,如果要实现以下操作,请先执行以上步骤,实现数据库的连接
定义模型类
class User(db.Model):
# 定义表名
__tablename__ = "user"
# 定义id为主键,必须设置id,并且必须设置成主键(primary_key)
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(128))
author = db.Column(db.Integer)
实现建表
if __name__ == '__main__':
# 删除表:没有实际意义,在学习的时候,可以保证每次的数据都是新的
# db.drop_all()
# 建表:会将继承自db.Model的类在数据库中映射出一张表
db.create_all()
app.run(debug=True, port=8888)
增删改查
增
user = User(name = "lisi")
或者
user = User()
user.name = "lisi"
db.session.add(user)
db.session.commit()
删
res = Book.query.filter(Book.id ==2).first()
或者
res=User.query.first()
db.session.delete(res)
db.session.commit()
改
user=User.query.first()
user.name='xuzhixiang'
db.session.commit()
或者
user = User().query.filter_by(id=4).first()
user.name = '二狗'
db.session.commit()
查
user = User().query.filter_by(id=4).first()
print(user.name)
- 语法:
- 模型类名.query.过滤器.查询执⾏行行器器
过滤器
返回BaseQuery类型对象 并不是最终的数据 最终的数据由 查询执行器获取
filert() 按照条件查找
比如:
User.quer.filter(User.name = “lisi”)
filter_by() 按照条件精确查找
比如:
User.query.filter_by(id=1)
查询执行器
all ( ) |
返回查询到的所有结果,是一个列表, User.query.filter(User.name != ‘wang’).all() |
first ( ) |
返回查询的第一个结果,User.query.filter(User.name != ‘wang’).first() |
get ( ) |
返回主键对应的行, User.query.get(1) |
count ( ) |
返回查询结果的数量 User.query.count() |
paginate ( ) |
参数分别对应的是要查询的是第几页,每页几条数据,如果有错是否输出。 User.query.paginate(2, 3, False),这个例子是,每页三条数据,查询第二页的数据 |
|
|
排序
order_by()
例子:
User.query.order_by(User.name)
User.query.order_by(User.name.desc())