AI智能
改变未来

Flask中如何使用MySQL数据库?


1.安装相关模块

pip3 install flask-sqlalchemypip3 intall pymysql

2.导入模块

import pymysqlfrom flask_sqlalchemy import SQLAlchemy

3.指定数据库连接

# 语法:app.config[\'SQLALCHEMY_DATABASE_URI\'] = \'mysql+pymysql://username:passwd@hostname[:port]/dbname?charset=utf8\'app.config[\'SQLALCHEMY_DATABASE_URI\'] = \'mysql+pymysql://root:mysql@127.0.0.1:3306/myflask?charset=utf8\'

4.指定数据库配置,用来自动提交数据库变动

app.config[\'SQLALCHEMY_COMMIT_TEARDOWN\'] = Tureapp.config[\'SQLALCHEMY_TRACK_MODIFICATIONS\'] = Trueapp.config[\'SQLALCHEMY_COMMIT_ON_TEARDOWN\'] = True

5.建立数据库对象

db = SQLAlchemy(app)

6.创建模型类,用来映射数据库表

class 类名(db.Model):#声明表名,如果不指定,则默认表名为小写类名__tablename__ = \'表名\'#建立字段函数字段名 = db.Column(字段类型,[参数]...)...例:class Students(db.Model):
  \'\'\'学生表\'\'\'__tablename__ = \'stu\' #默认表名为小写的类名即students,但可以通过__tablename__属性来设定id = db.Column(db.Integer,primary_key=True,nullable=False) #主键默认自增,所以不需要再设置auto_increment参数name = db.Column(db.String(20),nullable=False)age = db.Column(db.Integer)isDelete = db.Column(db.Boolean,nullable=False,default=False)class Subjects(db.Model):
  \'\'\'学科表\'\'\'id = db.Column(db.Integer,primary_key=True,nullable=False)title = db.Column(db.String(20),unique=True,nullable=False)class Scores(db.Model):
  \'\'\'成绩表\'\'\'id = db.Column(db.Integer,primary_key=True,nullable=False)stu_id = db.Column(db.ForeignKey(Students.id),nullable=False) # 外键sub_id = db.Column(db.ForeignKey(Subjects.id),nullable=False)score = db.Column(db.Integer,nullable=False)

6.1模型类中常见字段类型:

字段类型 说明
Integer 常规整型,通常为32位
SmallInteger 短整型,通常为16位
BigInteger 精度不受限整型
Float 浮点型
Numeric 小数
String 可变长度字符串
Text 可变长度字符串,适合大量文本
Unicode 可变长度Unicode字符串
Boolean 布尔类型
Date 日期类型
Time 时间类型
DateTime 日期时间类型
Interval 时间间隔,相当于datetime.timedelta
Enum 字符列表
PickleType 自动Pickle序列化
LargeBinary 二进制

6.2 模型类中字段常见参数:

参数 说明
autoincrement 是否自增(True/False)
prima56cry_key 是否主键
index 是否建立索引
unique 是否唯一
nullable 是否允许为null
default 设置默认值
db.ForeignKey(模型类名.id) 创建外键约束

7.数据库增、删、改、查操作

  • 添加:

    laowang = Students(name=\'老王\',age=30)laozhang = Students(name=\'老张\',age=35)db.session.add(laowang)db.session.add(laozhang)# db.session.add_all([laowang,laozhang]) 一次性添加包含所有记录对象的列表db.session.commit()
  • 查找

  • 完整的查询应该是:
    <模型类>.query.<过滤方法>.<查询方法>
  • 查询过滤器(返回新产生的查询对象)——可叠加使用
    filter():使用指定的规则过滤记录filter_by():使用指定的规则过滤记录(关键字表达式的形式)order_by():根据指定条件对记录进行排序limit():限制查询的条数group_by():根据指定条件对记录进行分组off_set():使用指定的值偏移原查询的结果
  • 查询方法
    all(): 返回所有包含查询记录的列表first(): 返回查询的第一条记录,未查到则返回Noneone(): 返回第一条记录,有且仅有一条记录,否则报错get(id): 返回指定主键值的记录,未查到则返回Nonecount(): 返回查询结果的数量one_or_none(): 有且仅有一条记录,返回记录,否则返回Nonefirst_or_404(): 返回查询的第一条记录,未查到则报404错误get_or_404(id): 返回指定主键值的记录,未查到则报404错误paginate(): 返回一个Pagination对象,可以对记录进行分页处理with_parent(类实例): 返回和这个实例相关联的对象
  • 示例
    from sqlalchemy import and_,or_,not_
    Students.query.all() #查询所有 包含所有记录的列表Students.query.filter_by(name=\'老张\').first()#条件查询,精确查询Students.query.filter(Students.name.endwith(\'王\')).all()# 模糊查询,返回名字以\'王\'结尾的所有数据。Students.query.filter(Students.name!=\'老王\').all()#逻辑非Students.query.filter(not_(Students.name==\'老王\')).all()#取反Students.query.filter(and_(Students.name==\'老王\',Students.age=20)).all() #逻辑与Students.query.filter(or_(Students.name==\'老王\',Students.age==30)).all() #逻辑或Students.query.order_by(Students.age).all()#排序查询Students.query.limit(1).all()#查询1条Students.query.get(id = 1)#精确查询
  • 更新

    stu = Students.query.first()stu.name = \'老李\'db.session.commit()
  • 删除

    laowang = Students.query.filter_by(name=\'老王\').first()db.session.delete(laowang)db.session.commit()

  • 赞(0) 打赏
    未经允许不得转载:爱站程序员基地 » Flask中如何使用MySQL数据库?