flask 数据库
安装插件
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple Flask pip install -i https://pypi.tuna.tsinghua.edu.cn/simple flask-wtf pymysql // 数据库 驱动 flask-sqlalchemy // shujuku flask-migrate // prm flask-mail // 邮箱 flask-wtf // 表达验证
数据库连接
在__init__ 文件下
db_uri = 'sqlite:///sqlite3.db' SQLALCHEMY_DATABASE_URI = db_uri SQLALCHEMY_TRACK_MODIFICATIONS = False SQLALCHEMY_ECHO = True
models 代码
# 数据库 from .exts import db # 创建用户表 class User(db.Model): __tablename__ = 'user' id = db.Column(db.Integer, primary_key=True, autoincrement=True) username = db.Column(db.String(200), unique=True, nullable=False) password = db.Column(db.String(256), nullable=False) email = db.Column(db.String(120), unique=True, nullable=False) sex = db.Column(db.Boolean, nullable=False)
注释 :
db.column :表示字段
db.Integer:表示整数
primary_key=True :主键
autoincrement=True:自动递增
db.string(30):varchar(30)可变字符串
unique=True :唯一约束
index=True :普通索引
default=1: 默认值
nullable=False :是否允许为
数据迁移
flask db init 创建迁移文件夹migrates,只调用一次 flask db migrate 生成迁移文件 flask db upgrade 执行迁移文件中的升级 flask db downgrade 执行迁移文件中的降级
添加多条数据
# 同时添加多条数据 users =[]
// 将数据 添加到列表 for i in range(10,30): u = User() u.name ='冰冰'+str(i) u.age = i users.append(u)
// 提交数据 db.session.add_all(users) db.session.commit()
添加一条数据
@pb.route('/useradd/') def user_add(): u = UserModel() u.username = 'kun' u.password = 123 try: db.session.add(u) db.session.commit() except Exception as e: db.session.rollback() return '成功'
数据库查询操作过滤器
filter(user.age == 20) 把过滤器添加到原查询上,返回一个新查询 filter_by(age>20) 把等值过滤器添加到原查询上,返回一个新查询 列表 limit() 使用指定的值限制原查询返回的结果数量,返回一个新查询 offset() 偏移原查询返回的结果,返回一个新查询 order_by( desc('age')) 降序 根据指定条件对原查询结果进行排序,返回一 个新查询
group_by() 根据指定条件对原查询结果进行分组,返回一个新查询
常用查询
all() 以列表形式返回查询的所有结果,返回列表 first()返回查询的第一个结果,如果没有结果,则返回 None first_or_404() 返回查询的第一个结果,如果没有结果,则终止请求,返回 404 错误响应 get() 返回指定主键对应的行,如果没有对应的行,则返回 None get_or_404() 返回指定主键对应的行,如果没找到指定的主键,则终止请求,返回 404 错误响应 count() 返回查询结果的数量 paginate() 返回一个 Paginate 对象,它包含指定范围内的结果
属性查询
查询属性 contains ('王') 模糊查询 找名字带王 startswith () 什么开始 endswith() 什么结束 in_([10, 20]) 包含 (10, 20) __gt__ __ge__ __lt__ __le__
逻辑运算
# 逻辑运算: and_, or_, not users =User.query.filter(User.age>20,User.age<25) # 且 users =User.query.filter(and(user.age>20,user.age<25)) # 且 users =User.query.filter(or_(User.age>25,User.age<20))#或
users =User.query.filter(not_(or_(user.age>25,User.age<20)))#非