【Flask学习笔记五】使用数据库

这篇博客介绍了如何在Flask项目中使用SQLAlchemy进行数据库操作。内容包括SQLAlchemy的安装、数据库连接设置,以及如何通过Python对象进行数据的插入、修改、删除和查询。在Flask-SQLAlchemy中,db.session用于管理会话,query对象则用于执行数据库查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • SQLALchemy 实际上是对数据库的抽象,让开发者不用直接和 SQL 语句打交道,而是通过 Python 对象来操作数据库,在舍弃一些性能开销的同时,换来的是开发效率的较大提升

安装

pip install flask-sqlalchemy
如果是mysql数据库,需要安装:
pip install flask-mysqldb or pip install pymysql

数据库连接设置

  • 设置数据库的连接地址
# 数据库链接地址
# 格式:mysql://<用户名>:<密码>@:<端口>/数据库名称 
# 端口可省略
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@127.0.0.1:3306/test'
# 动态追踪修改设置,如未设置只会提示警告 -->不建议开启 未来会移除
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)
  • 配置完成后,需要去MySQL中创建项目所使用的数据库
$ mysql -uroot -pmysql
$ create database test charset utf8;

常用的SQLAlchemy字段类型
常用的SQLAlchemy列选项
常用的SQLAlchemy关系选项

数据库基本操作

  • 在Flask-SQLAlchemy中,插入、修改、删除操作,均由数据库会话管理。
    • 会话用 db.session 表示。在准备把数据写入数据库前,要先将数据添加到会话中然后调用 db.session.commit() 方法提交会话。
  • 在 Flask-SQLAlchemy 中,查询操作是通过 query 对象操作数据。
    • 最基本的查询是返回表中所有数据,可以通过过滤器进行更精确的数据库查询。
  • 常见操作语句
db.session.add(role) 添加对象
db.session.add_all([user1,user2..]) 添加多个对象
db.session.commit() 提交会话
db.session.delete(user) 删除对象
db.session.rollback() 回滚
db.session.remove() 移除会话

在视图函数中定义模型类

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

#设置连接数据库的URL
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@127.0.0.1:3306/test'
#设置数据库追踪信息,压制警告
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
#创建SQLAlchemy对象,读取app中配置信息
db = SQLAlchemy(app)

'''
两张表
角色(管理员/用户)Role定义用户有两种 1管理员 2用户
用户(角色ID)User
'''

#定义角色模型(一方) 
#数据库的模型,需要继承db.Model
class Role(db.Model):
    # 定义表名
    __tablename__ = 'roles'
    # 定义列对象
    # db.Column表示是一个字段
    id = db.Column(db.Integer,primary_key=True)
    name = db.Column(db.String(64),unique=True)
    #设置关系属性,方便查询使用
    us = db.relationship('User', backref='role')
  #重写__repr__方法,方便查看对象输出内容
    def __repr__(self):
        return 'Role:%s'% self.name

# 定义用户模型类(多方)
class User(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True, index=True)
    # 外键
    role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
	email = db.Column(db.String(64),unique=True)
    password = db.Column(db.String(64))
    role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))

    def __repr__(self):
        return 'User:%s'%self.name

	# User希望有role属性,但是这个属性的定义,需要在另一个模型中定义 backref='role'

if __name__ == '__main__':
    #删除所有和db相关联的表
    db.drop_all()
    #创建所有和db相关联的表
    db.create_all()
    app.run(debug=True)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值