Flask-SQLAlchemy:ORM操作数据库增删改查的详细指南

在这里插入图片描述

前言

Flask-SQLAlchemy 是 Flask 框架的一个强大扩展,使得与数据库的交互变得简单和直观。ORM(对象关系映射)允许我们使用 Python 类和对象来表示数据库中的表和记录,从而简化了增删改查(CRUD)操作。本文将详细介绍如何使用 Flask-SQLAlchemy 进行这些操作。

初始化项目

在开始之前,确保您已经安装了 Flask 和 Flask-SQLAlchemy。可以使用以下命令安装它们:

pip install Flask Flask-SQLAlchemy

创建一个基本的 Flask 应用,并初始化 SQLAlchemy:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

定义数据库模型

定义一个简单的模型,例如用户模型 User

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

    def __repr__(self):
        return f'<User {self.username}>'

创建数据库和表:

with app.app_context():
    db.create_all()

创建记录(Create)

向数据库中添加新记录可以使用 SQLAlchemy 的 addcommit 方法:

@app.route('/create_user')
def create_user():
    new_user = User(username='john_doe', email='john@example.com')
    db.session.add(new_user)
    db.session.commit()
    return f'User {new_user.username} created!'

查询记录(Read)

查询数据库中的记录有多种方法,可以使用 filter_byfilterallfirst 等方法:

@app.route('/get_user/<username>')
def get_user(username):
    user = User.query.filter_by(username=username).first()
    if user:
        return f'User found: {user.username}, Email: {user.email}'
    else:
        return 'User not found'

更新记录(Update)

更新数据库中的记录需要先查询到该记录,然后修改其属性值并提交更改:

@app.route('/update_user/<username>')
def update_user(username):
    user = User.query.filter_by(username=username).first()
    if user:
        user.email = 'new_email@example.com'
        db.session.commit()
        return f'User {user.username} updated!'
    else:
        return 'User not found'

删除记录(Delete)

删除数据库中的记录需要先查询到该记录,然后使用 delete 方法删除并提交更改:

@app.route('/delete_user/<username>')
def delete_user(username):
    user = User.query.filter_by(username=username).first()
    if user:
        db.session.delete(user)
        db.session.commit()
        return f'User {user.username} deleted!'
    else:
        return 'User not found'

完整示例

以下是一个完整的示例代码,包括所有 CRUD 操作:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

    def __repr__(self):
        return f'<User {self.username}>'

with app.app_context():
    db.create_all()

@app.route('/create_user')
def create_user():
    new_user = User(username='john_doe', email='john@example.com')
    db.session.add(new_user)
    db.session.commit()
    return f'User {new_user.username} created!'

@app.route('/get_user/<username>')
def get_user(username):
    user = User.query.filter_by(username=username).first()
    if user:
        return f'User found: {user.username}, Email: {user.email}'
    else:
        return 'User not found'

@app.route('/update_user/<username>')
def update_user(username):
    user = User.query.filter_by(username=username).first()
    if user:
        user.email = 'new_email@example.com'
        db.session.commit()
        return f'User {user.username} updated!'
    else:
        return 'User not found'

@app.route('/delete_user/<username>')
def delete_user(username):
    user = User.query.filter_by(username=username).first()
    if user:
        db.session.delete(user)
        db.session.commit()
        return f'User {user.username} deleted!'
    else:
        return 'User not found'

if __name__ == '__main__':
    app.run(debug=True)

总结

通过本文,您已经了解了如何使用 Flask-SQLAlchemy 进行数据库的增删改查操作。使用 Flask-SQLAlchemy,您可以轻松地管理数据库操作,提高开发效率。

获取更多软件测试技术资料/面试题解析,请点击!

在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值