Flask 链接数据库基础

本文介绍了如何在Flask应用中连接和操作数据库,包括数据库安装、配置、创建和删除数据库,以及CRUD(增删改查)操作。Flask使用SQLAlchemy作为ORM,并通过.commit()提交更改。详细讲解了查询、过滤、更新和删除数据的不同方法。

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

数据库安装

Flask都是需要自己安装自己配置,数据库也不例外,因此需要安装

pip install flask-sqlalchemy
pip install pymysql

数据库配置

需要在配置app的文件下配,我们命名的是init文件

from flask_sqlalchemy import SQLAlchemy

    # 配置链接数据库 用户密码主机等
    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://用户名:密码@localhost(主机地址):3306/flask3'
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    # 初始化app
    SQLAlchemy(app=app)

除了主机地址是@别的都是:隔开

设置数据库内容

新建一个py文件,可以命名为models
用到的关键字参数有:
primary_key 主键
autoincrement 自增
unique 唯一
default 默认值
Integer 整形
String字符串
数据库名字:tablename

__tablename__ = 'student' 数据库名字

导入SQLALchemy

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()


class Student(db.Model):
    s_id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    s_name = db.Column(db.String(20), unique=True)
    s_age = db.Column(db.Integer, default=18)

    __tablename__ = 'student'

创建,删除数据库

与Django不同的是,django是命令去创建,而Flask是调用函数去创建
引用modles里的db参数,通过create_all()创建

from Stu.models import db
# 创建数据库
@stu.route('/creat/')
def creat_table():
    db.create_all()

    return '成功'

通过drop_all()删除数据库

# 删除数据库
@stu.route('/del/')
def del_table():
    db.drop_all()
    return '删除成功'

数据库的增删改查(CDUR)

与Django不同的是flask的数据先是保存在缓存里面,需要用commit后才能上传提交到数据库中,否则浏览器中看的参数改变,实际数据库并没有改版

增加数据

.add()

# 同样需要导入models
from models import Student
# 增加
@stu.route('/creatstu/')
def crest_stu():
    stu = Student()
    stu.s_name = 'coco%d' % random.randrange(100)
    stu.s_age = '%d' % random.randrange(30)
    # 添加随机数,方便看出数据库的每次的数据都不同
    db.session.add(stu)
    try:
        # flask写表示上传到数据库
        db.session.commit()
    except:
        db.session.rollback()

    return '学生启动'

查找

查询全部

方法一:
查找全部,这里可以用 .query

@stu.route('/stulist/')
def stu_all():
    方法一
    stus = Student.query.all()
    render_template('stus.html', stus=stus)  

方法二:
可以用原生的sql语言查找

    sql = 'select * from student;'
    stus = db.session.execute(sql)
    return render_template('stus.html', stus=stus)
查询指定参数

方法一:
filter

@stu.route('/stulistt/')
def stu_all2():
   方法一filter
   stus = Student.query.filter(Student.s_name == 'coco1')
   return render_template('stus.html', stus=stus)

方法二:
filter_by

stus = Student.query.filter_by(s_name='coco1')

方法三:
原生sql

sql = 'select * from student where s_id<5;'
tus = db.session.execute(sql)

更新数据

方法一:
update

@stu.route('/update/')
def update_stu():
   Student.query.filter(Student.s_id == 2).update({'s_name': '大大'})
    db.session.commit()

    return redirect(url_for('stu.stu_all'))

方法二:
filter找到后别名然后修改

stu = Student.query.filter_by(s_id=2).first()
    stu.s_name = '海飞丝'

注意这里的first不是为了取值第一个,而是Flask是列表传入,如果不是。first那么就获取不到列表值
这里写图片描述

删除

delete()

# 删除id为5的学生
@stu.route('/dele/')
def del_stu():
    stu = Student.query.filter(Student.s_id == 5).first()
    db.session.delete(stu)
    db.session.commit()

    return '删除成功'

拓展

前面讲的前端数据库macro可以运用到前端读取数据库的方法中

# show.html
{% macro stu_list(id,name,age) %}
            id: {{ id }}
            姓名:{{ name }}
            年龄:{{ age }}
{% endmacro %}
    {% for i in stus %}
        <li>
            {% from 'show.html' import stu_list %}
            {{ stu_list(i.s_id,i.s_name,i.s_age) }}
        </li>
    {% endfor %}

定义数据库的时候init

    def __init__(self, name, age):
        self.s_name = name
        self.s_age = age

这样在上面增加数据方法的时候就可以直接使用

Student(name(定义的名字),age(定义的年龄))

from models import Student
# 增加
@stu.route('/creatstu/')
def crest_stu():
#就可以直接写入Student中了
    stu = Student('coco%d' % random.randrange(100),'%d' % random.randrange(30)) 
    db.session.add(stu)
    try:
        db.session.commit()
    except:
        db.session.rollback()
    return '学生启动'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值