flask 数据库

longly1111 / 2025-02-21 / 原文

 

安装插件 

 

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)))#非