如何用Django模型获取MySQL多列数据并转成Pandas DataFrame?
简便实现Django模型转Pandas DataFrame的方法
前提准备
首先确保你已经为all_users表生成了对应的Django模型:
- 运行命令自动生成模型(基于现有数据库表):
python manage.py inspectdb > your_app/models.py
- 打开生成的模型文件,找到对应
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的转换:
- 先安装依赖:
pip install django-pandas
- 在
settings.py的INSTALLED_APPS中添加'django_pandas' - 转换代码:
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
相关产品推荐
相关产品推荐

