CRUD操作

使用ORM进行CRUD(Create、Read、Update、Delete)操作,需要先把操作添加到会话中,通过db.session可以获取到会话对象。会话对象只是在内存中,如果想要把会话中的操作提交到数据库中,需要调用db.session.commit()操作,如果想要把会话中的操作回滚,则可以通过db.session.rollback()实现。下面分别对CRUD进行讲解。

1.添加

使用ORM创建一条数据非常简单,先使用ORM模型创建一个对象,然后添加到会话中,再进行commit操作即可,示例代码如下。

# 添加
@app.route('/user/add')
def add_user():
    # 创建 ORM 对象
    user = User(username="宇宙核", password="123456")
    user1 = User(username="张三", password="111111")
    user2 = User(username="李四", password="222222")
    user3 = User(username="王五", password="333333")
    # 将 ORM 对象添加到 db.session 中
    db.session.add(user)
    db.session.add(user1)
    db.session.add(user2)
    db.session.add(user3)
    # 将 db.session 中的改变同步到数据库中
    db.session.commit()
    return "用户添加成功!"

然后打开数据库看看,看到下面那个即添加成功

2.查询

Read操作也就是查询。ORM模型都是继承自db.Model,db.Model内置的query属性上有许多方法,可以实现对ORM模型的查询操作。query上的方法可以分为两大类,分别是过滤方法以及提取方法。示例代码如下。

# 查询
@app.route('/user/query')
def query_user():
    # 1.get查找:根据主键查找,一次只能查一条,这里的主键是id
    # user = User.query.get(1)
    # print(f'{user.id}-{user.username}-{user.password}')
    # return '数据查找成功!'

    # 2.filter_by查找,查找多条数据
    users = User.query.filter_by(username='张三')
    print(type(users)) # 这里得到的users是一个Query类数组,可以用下标来获取数据
    for user in users:
        print(user.username)
    return '数据查找成功!'

3.修改

# 修改
@app.route('/user/update')
def update_user():
    user = User.query.filter_by(username='宇宙核').first()  # .first()拿到第一条数据
    user.password = '666666'
    db.session.commit()
    return "数据修改成功!"

修改前:

   

修改后:

4.删除

# 删除
@app.route('/user/delete')
def delete_user():
    # 1.查找
    user = User.query.get(1)
    # 2.从db.session中删除
    db.session.delete(user)
    # 3.将db.session中的修改同步到数据库中
    db.session.commit()
    return '数据删除成功!'

删除前:

删除后:

app.py 完整代码:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

# MySQL所在的主机名或域名
HOSTNAME = '127.0.0.1'
# MySQL监听的端口号,默认3306
PORT = 3306
# 连接MySQL的用户名,用自己的
USERNAME = 'root'
# 连接MySQL的密码,用自己的
PASSWORD = '***'
# MySQL上创建的数据库名称
DATABASE = 'database_learn'

app.config[
    'SQLALCHEMY_DATABASE_URI'] = f'mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8mb4'

# 在app.config中设置好连接数据库的信息
# 然后使用SQLAlchemy(app)创建一个db对象
# SQLAlchemy会自动读取app.config中连接数据库的信息
db = SQLAlchemy(app)


class User(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(100), nullable=False)
    password = db.Column(db.String(100), nullable=False)


with app.app_context():  # 请求应用上下文
    db.create_all()  # 把所有的表同步到数据库中去


@app.route('/')
def hello_world():
    return 'Hello World!'


# 添加
@app.route('/user/add')
def add_user():
    # 创建 ORM 对象
    user = User(username="宇宙核", password="123456")
    user1 = User(username="张三", password="111111")
    user2 = User(username="李四", password="222222")
    user3 = User(username="王五", password="333333")
    # 将 ORM 对象添加到 db.session 中
    db.session.add(user)
    db.session.add(user1)
    db.session.add(user2)
    db.session.add(user3)
    # 将 db.session 中的改变同步到数据库中
    db.session.commit()
    return "用户添加成功!"


# 查询
@app.route('/user/query')
def query_user():
    # 1.get查找:根据主键查找,一次只能查一条,这里的主键是id
    # user = User.query.get(1)
    # print(f'{user.id}-{user.username}-{user.password}')
    # return '数据查找成功!'

    # 2.filter_by查找,查找多条数据
    users = User.query.filter_by(username='张三')
    print(type(users))  # 这里得到的users是一个Query类数组,可以用下标来获取数据
    for user in users:
        print(user.username)
    return '数据查找成功!'


# 修改
@app.route('/user/update')
def update_user():
    user = User.query.filter_by(username='宇宙核').first()  # .first()拿到第一条数据
    user.password = '666666'
    db.session.commit()
    return "数据修改成功!"


# 删除
@app.route('/user/delete')
def delete_user():
    # 1.查找
    user = User.query.get(1)
    # 2.从db.session中删除
    db.session.delete(user)
    # 3.将db.session中的修改同步到数据库中
    db.session.commit()
    return '数据删除成功!'


if __name__ == '__main__':
    app.run()
Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐