我爱编程

使用 pandas dataframe 替换 django or

2018-07-22  本文已影响0人  简达的

pandas 作为数据分析处理的强大工具,不仅具有几乎所有 sql 语句所能拥有的功能,如:join、group by、order by 等等,同时兼具完备的数据分析功能;
并且 pandas 获取数据后,是在内存中进行数据处理,效率会远高于数据库查询操作,尤其是在多表 join 操作中,相应的 pandas merge 操作性能会非常优越
本篇介绍如何使用 pandas dataframe 替换 django QuerySet 及 sqlalchemy ORM Query

一、pandas dataframe 替换 django orm QuerySet

字典类型的 QuerySet 能够转换成 df,即 orm.objects.filter().values() 的返回值,将这个返回值转成 list
然后使用 pd.Dataframe()
如:

import pandas as pd
from django.contrib.auth.models import User

user_q = User.objects.all()
user_df = pd.DataFrame(list(user_q.values('username','password')))

jupyter 上结果如下(jupyter 操作 django 参考上篇linux 利用 miniconda 搭建 jupyter notebook 开发环境(二)--Django):

QuerySet -> dataframe

二、pandas dataframe 替换 sqlalchemy orm Query

1、建 sqlalchemy orm

这里反射 auth_user 表

from django.conf import settings
from utils.db_helper import get_db_url_engin
from sqlalchemy.ext.automap import automap_base

BaseAuto = automap_base()
engine = get_db_url_engin(settings.DJANGO_DATABASE_URL)
BaseAuto.prepare(engine, reflect=True)

User = BaseAuto.classes.auth_user
2、建立session
import sqlalchemy as sa
from sqlalchemy.orm import sessionmaker
db_url = settings.DJANGO_DATABASE_URL
session = sessionmaker(bind=sa.create_engine(db_url))()
3、查询

使用 pd.read_sql(),传入 session.query().statement 和 session.query().bind 两个参数,进行转换

import pandas as pd
user_q = session.query(User.username,User.password)
user_df = pd.read_sql(user_q.statement, user_q.session.bind)

结果同上


sqlalchemy query -> dataframe

总结

使用 pandas dataframe 替换 django 及 sqlalchemy ORM Query 后即可使用 pandas 进行相应数据的分析和操作了

上一篇下一篇

猜你喜欢

热点阅读