gpt4 book ai didi

python - SQLAlchemy ORM 返回单列,如何避免常见的后处理

转载 作者:IT老高 更新时间:2023-10-28 21:38:51 29 4
gpt4 key购买 nike

我正在使用 SQL Alchemy 的 ORM,我发现当我返回单个列时,我得到的结果如下:

[(result,), (result_2,)] # etc...

有了这样的一套,我发现我必须经常这样做:

results = [r[0] for r in results] # So that I just have a list of result values

这并不是那么“糟糕”,因为我的结果集通常很小,但如果不是这样,这可能会增加大量开销。最大的问题是我觉得它使源代码困惑,错过这一步是我遇到的一个很常见的错误。

有没有办法避免这个额外的步骤?

一个相关的问题:在这种情况下,orm 的这种行为似乎很不方便,但在我的结果集是 [(id, value)] 的另一种情况下,它最终是这样的:

[(result_1_id, result_1_val), (result_2_id, result_2_val)]

然后我可以这样做:

results = dict(results) # so I have a map of id to value

这一步的好处是在返回结果后作为一个有用的步骤有意义。

这真的是一个问题,还是我只是个挑剔的人,得到结果集后的后处理对这两种情况都有意义?我相信我们可以想到一些其他常见的后处理操作,以使结果集在应用程序代码中更有用。是否有全面的高性能和方便的解决方案,或者后期处理是不可避免的,并且只是不同的应用程序使用所需要的?

当我的应用程序实际上可以利用 SQL Alchemy 的 ORM 返回的对象时,它似乎非常有用,但在我不能或不能的情况下,就没有那么多了。这只是一般 ORM 的常见问题吗?在这种情况下,我最好不要使用 ORM 层吗?

我想我应该展示一个我正在谈论的实际 orm 查询的示例:

session.query(OrmObj.column_name).all()

session.query(OrmObj.id_column_name, OrmObj.value_column_name).all()

当然,在实际查询中通常会有一些过滤器等。

最佳答案

减少源中困惑的一种方法是像这样迭代:

results = [r for (r, ) in results]

虽然这个解决方案比使用 [] 运算符长一个字符,但我认为它更容易理解。

为了更简洁,请删除括号。这使得在阅读代码时更难注意到您实际上是在处理元组:

results = [r for r, in results]

关于python - SQLAlchemy ORM 返回单列,如何避免常见的后处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9486180/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com