Flask框架-数据库查询对象转字典或列表:实现model_to_dict的功能

作者:很菜不狗2024.01.17 12:18浏览量:8

简介:在Flask框架中,将数据库查询对象转换为字典或列表是一个常见的需求。这里我们将介绍如何实现这个功能,使用Python的内置函数以及Flask-SQLAlchemy扩展。

千帆应用开发平台“智能体Pro”全新上线 限时免费体验

面向慢思考场景,支持低代码配置的方式创建“智能体Pro”应用

立即体验

在Flask框架中,我们经常需要将数据库查询结果转换为字典或列表格式,以便在前端展示或进行进一步处理。以下是一个使用Flask-SQLAlchemy扩展实现此功能的示例:
首先,确保你已经安装了Flask-SQLAlchemy扩展。你可以使用pip进行安装:

  1. pip install Flask-SQLAlchemy

接下来,创建一个简单的Flask应用程序并设置数据库模型。假设我们有一个简单的User模型:

  1. from flask import Flask
  2. from flask_sqlalchemy import SQLAlchemy
  3. app = Flask(__name__)
  4. app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db' # 修改为你的数据库URI
  5. db = SQLAlchemy(app)
  6. class User(db.Model):
  7. id = db.Column(db.Integer, primary_key=True)
  8. name = db.Column(db.String(50), nullable=False)
  9. email = db.Column(db.String(120), unique=True, nullable=False)

为了将查询对象转换为字典或列表,我们可以编写一个辅助函数。这个函数将使用Python的内置vars()函数将对象的属性转换为字典:

  1. def model_to_dict(model):
  2. return {col: value for col, value in vars(model).items()}

现在,你可以使用这个函数将查询对象转换为字典:

  1. user = User.query.get(1) # 假设ID为1的用户存在
  2. user_dict = model_to_dict(user)
  3. print(user_dict) # 输出类似 {'id': 1, 'name': 'John Doe', 'email': 'john@example.com'}

如果你想将多个查询对象转换为一个字典列表,可以使用列表推导式:

  1. users = User.query.all() # 获取所有用户对象
  2. user_dict_list = [model_to_dict(user) for user in users]
  3. print(user_dict_list) # 输出类似 [{'id': 1, 'name': 'John Doe', 'email': 'john@example.com'}, ...]

如果你想将查询对象转换为列表而不是字典,可以使用User.__table__.columns.keys()获取列名,然后使用这些列名作为键来创建字典。但是请注意,这样做的话键的顺序将与数据库列的顺序保持一致。例如:

  1. def model_to_list(model):
  2. return [getattr(model, col) for col in User.__table__.columns.keys()]

现在,你可以使用这个函数将查询对象转换为列表:
```python
user = User.query.get(1) # 假设ID为1的用户存在
user_list = model_to_list(user)
print(user_list) # 输出类似 [‘John Doe’, ‘john@example.com’, …](按照数据库列的顺序)

article bottom image

相关文章推荐

发表评论