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):
二、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 进行相应数据的分析和操作了
网友评论