首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
V2EX  ›  Python

萌新求助 ! Python sqlalchemy 的复杂写法。

  •  
  •   eteryao · 143 天前 · 908 次点击
    这是一个创建于 143 天前的主题,其中的信息可能已经有所发展或是发生改变。
    大佬们 求助! 有没有 orm 写的很 6 的大佬!!!

    救救萌新!
    现有一条原生 sql。
    select a.date,sum(a.tag_count) as tag_count,a.tag_id,a.tag_name,b.user_id,b.user_name from (
    (

    select z.netflow_alias,count(1) as tag_count,z.date,z.product_id,x.tag_id,x.tag_name from
    (
    SELECT netflow_alias,left(create_time,10) as date,product_id FROM weidian_operator.t_tj_order_detail_qingshe
    where left(create_time,10)=DATE_SUB(curdate(),INTERVAL 1 DAY)
    ) z
    left join
    (

    select q.tag_id,q.product_id,w.tag_name from
    (SELECT tag_id,product_id FROM weidian_operator.t_product_tag ) q

    left join

    (select id,tag_name from weidian_operator.t_tag) w
    on q.tag_id=w.id

    ) x
    on z.product_id=x.product_id
    group by x.tag_id

    ) a

    left join

    (select netflow_alias,user_name,user_id from weidian_operator.t_tj_team_relation where user_id is not null) b

    on a.netflow_alias=b.netflow_alias
    )
    where user_id is not null
    group by a.date,b.user_id;

    那么请问 orm 怎么写。 哪位大佬肯帮帮我。呜呜呜
    8 回复  |  直到 2019-07-16 21:50:12 +08:00
        1
    myyou   143 天前
    orm 不适合或者写不了复杂的 SQL,你还是老老实实的直接用 SQL 查吧。
        2
    eteryao   143 天前
    @myyou emmm 好的吧。谢谢大佬!!
        3
    ipwx   143 天前
    我记得 SQLAlchemy 可以把 SQL 结果提取出来变成 object。
        4
    vZexc0m   143 天前
    这么多子查询 抽出来不就简单了吗
        5
    arrow8899   143 天前
    1. 把子查询分开查,然后在程序里面做处理;
    2. 加索引,不要使用 Null ;
    3. 看能否优化你的数据模型,避免这种复杂的 join group 查询;
    4. 如果数据量小的话,估计还将就;对于大量数据来说,还是建议使用 Flink Spark 这种工具先聚合处理一次,避免重复在代码里面进行大量的 group join 以及函数运算操作,否则性能会很差。
        6
    txy3000   143 天前
    先去看看业务逻辑吧 照着这个 sql 硬改事倍功半
        7
    hp66722667   143 天前
    这个排版真是头疼,一点看的欲望都没有
        8
    lolizeppelin   142 天前
    这种复杂查询,量小还好,量大没专门优化过,直接要死
    还拿 ORM 来做......
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   975 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 23ms · UTC 22:21 · PVG 06:21 · LAX 14:21 · JFK 17:21
    ♥ Do have faith in what you're doing.