17 使用SQLAlchemy进行数据库操作

在上一篇文章中,我们讨论了表单处理和表单验证,这为我们的应用程序提供了前端数据输入的基础。而在这一篇中,我们将深入探讨使用 SQLAlchemy 进行数据库操作,为我们的 Flask 应用程序增加持久化存储的能力。我们的最终目标是能够通过数据库对应用程序的数据进行操作。

什么是 SQLAlchemy?

SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)框架,它为 Python 提供了通用的 SQL 语言接口。通过 SQLAlchemy,我们可以使用 Python 类和对象来表示我们的数据库表和记录,从而使得数据操作更加直观和方便。

安装 SQLAlchemy

在开始之前,我们需要先安装 SQLAlchemy。可以使用以下命令:

1
pip install Flask-SQLAlchemy

Flask-SQLAlchemy 是一个与 Flask 配合使用的扩展,它简化了 SQLAlchemy 在 Flask 应用中的使用。

配置数据库

在你的 Flask 应用中,你需要配置数据库连接。下面是一个基本的示例:

1
2
3
4
5
6
7
8
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db' # 使用 SQLite 数据库
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

在上面的代码中,我们配置了一个 SQLite 数据库,文件名为 example.db。你可以根据需要修改为其他数据库,如 PostgreSQL 或 MySQL。

定义模型

SQLAlchemy 中,我们使用模型类来定义数据库表。模型类映射到数据库表,类的属性映射到表的列。以下是一个简单的用户模型示例:

1
2
3
4
5
6
7
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}>'

在这个 User 类中,我们定义了三个属性:idusernameemail。其中 id 是主键,usernameemail 则是唯一且不能为空的。

数据库迁移

在定义完模型后,我们需要创建数据库和表。你可以通过以下命令建立数据库和表:

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

这段代码会根据你定义的模型生成相应的数据库表。

基本数据库操作

在使用 SQLAlchemy 进行数据库操作时,我们通常会用到 CRUD(创建、读取、更新、删除)操作。接下来我们将详细探讨每一个操作。

创建用户

我们可以通过以下方式创建一个新的用户:

1
2
3
new_user = User(username='john_doe', email='john@example.com')
db.session.add(new_user) # 将新用户添加到会话中
db.session.commit() # 提交会话

这段代码会在数据库中插入一条新的用户记录。

读取用户

要查询用户,我们可以使用以下方法:

1
2
user = User.query.filter_by(username='john_doe').first()  # 查询第一个符合条件的用户
print(user.email) # 输出用户的邮箱

filter_by 方法用于筛选符合条件的数据,而 first 方法用于获取查询结果中的第一条记录。

更新用户

要更新用户信息,只需修改对象属性并提交会话,例如:

1
2
user.email = 'john.doe@example.com'  # 修改邮箱
db.session.commit() # 提交更改

这样会将该用户的邮箱更新到新的值。

删除用户

要删除用户,可以使用以下代码:

1
2
db.session.delete(user)  # 从会话中删除用户
db.session.commit() # 提交更改

只需从会话中删除对象并提交即可,相关记录将会被移除。

小案例:用户注册

为了更好地展示 SQLAlchemy 在实际应用中的使用,这里是一个简单的用户注册 API 的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from flask import request, jsonify

@app.route('/register', methods=['POST'])
def register():
data = request.get_json()
username = data['username']
email = data['email']

if User.query.filter_by(username=username).first() is not None:
return jsonify({'message': '用户已存在!'}), 400

new_user = User(username=username, email=email)
db.session.add(new_user)
db.session.commit()

return jsonify({'message': '用户注册成功!', 'username': username}), 201

在这个 register 路由中,我们接收 POST 请求的 JSON 数据,检查用户是否已存在,并进行相应的创建操作。

结语

至此,我们简单地介绍了如何在 Flask 应用中使用 SQLAlchemy 进行数据库操作,从配置数据库到基本的 CRUD 操作。通过实践这些内容,你将能够为你的 Flask 应用程序处理数据存储与管理。在下一篇文章中,我们将进一步深入 CRUD 操作的细节,探索更复杂的数据库查询和操作。希望本篇文章内容对你有所帮助!

17 使用SQLAlchemy进行数据库操作

https://zglg.work/flask-zero/17/

作者

IT教程网(郭震)

发布于

2024-08-10

更新于

2024-08-10

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论