You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Django模型获取MySQL多列数据并转成Pandas DataFrame?

简便实现Django模型转Pandas DataFrame的方法

前提准备

首先确保你已经为all_users表生成了对应的Django模型:

  1. 运行命令自动生成模型(基于现有数据库表):
python manage.py inspectdb > your_app/models.py
  1. 打开生成的模型文件,找到对应all_users的模型类(比如AllUsers),修改其Meta类:
class AllUsers(models.Model):
    # 自动生成的字段...
    class Meta:
        managed = False  # 避免Django尝试修改现有表结构
        db_table = 'all_users'  # 指定对应数据库表名

方法1:原生Django + Pandas(无需额外依赖)

直接利用Django QuerySet的values()或values_list()方法,结合Pandas转换,不用手动写所有列名:

方式1.1:使用values()(返回字典列表,直接转DataFrame)

import pandas as pd
from your_app.models import AllUsers

# 获取全量数据的QuerySet
users_queryset = AllUsers.objects.all()

# 直接将QuerySet转成DataFrame,自动识别字段名
df = pd.DataFrame(users_queryset.values())

注:values()默认返回模型所有字段的键值对,若只需特定字段,可传入字段名,比如values('user_id', 'age', 'purchase_count')

方式1.2:使用values_list()(返回元组列表,需指定列名)

import pandas as pd
from your_app.models import AllUsers

users_queryset = AllUsers.objects.all()
# 自动获取模型所有字段名
field_names = [field.name for field in AllUsers._meta.fields]

# 转成DataFrame并指定列名
df = pd.DataFrame(users_queryset.values_list(*field_names), columns=field_names)

方法2:使用django-pandas库(更简洁)

django-pandas是专门为Django和Pandas集成开发的工具,能一键完成QuerySet到DataFrame的转换:

  1. 先安装依赖:
pip install django-pandas
  1. 在settings.py的INSTALLED_APPS中添加'django_pandas'
  2. 转换代码:
from django_pandas.io import read_frame
from your_app.models import AllUsers

users_queryset = AllUsers.objects.all()
# 直接生成DataFrame,自动处理字段映射
df = read_frame(users_queryset)

该方法还支持自动处理外键、聚合函数等场景,适合复杂数据需求。


优势对比

相比原生SQL手动列所有字段名,以上方法的好处:

  • 无需硬编码27个列名,字段变更时只需同步模型,无需修改查询代码
  • 利用Django ORM的安全性(防止SQL注入)
  • 代码更简洁易维护,符合Django开发规范

内容的提问来源于stack exchange,提问作者XAVIXXVI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 09:40:59