相关疑难解决方法(0)

SQL Alchemy ORM返回单列,如何避免常见的后期处理

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

[(result,), (result_2,)] # etc...
Run Code Online (Sandbox Code Playgroud)

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

results = [r[0] for r in results] # So that I just have a list of result values
Run Code Online (Sandbox Code Playgroud)

这不是"坏",因为我的结果集通常很小,但如果不是这样,可能会增加很多开销.最重要的是我觉得它使源变得混乱,错过这一步是我遇到的一个非常常见的错误.

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

一个相关的旁白:在ORM的这种行为似乎在这种情况下不方便,但在我的结果集是另一种情况,[(ID,值)]它最终是这样的:

[(result_1_id, result_1_val), (result_2_id, result_2_val)]
Run Code Online (Sandbox Code Playgroud)

然后我可以这样做:

results = dict(results) # so I have a map of id to value
Run Code Online (Sandbox Code Playgroud)

这个有一个优点,在返回结果后作为一个有用的步骤.

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

当我的应用程序实际上可以由SQL炼金术的ORM返回的对象的优势似乎非常有帮助,但在情况下,我不能或不会,没有这么多.这一般只是ORM的常见问题吗?在这样的情况下,我最好不要使用ORM层吗?

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

session.query(OrmObj.column_name).all()
Run Code Online (Sandbox Code Playgroud)

要么

session.query(OrmObj.id_column_name, OrmObj.value_column_name).all()
Run Code Online (Sandbox Code Playgroud)

当然,在真正的查询中通常会有一些过滤器等.

python orm sqlalchemy

68
推荐指数
4
解决办法
2万
查看次数

在SQLAlchemy中查询属性列表而不是元组

我正在查询模型的ID,并获取(int,)元组列表而不是id列表.有没有办法直接查询属性?

result = session.query(MyModel.id).all()
Run Code Online (Sandbox Code Playgroud)

我意识到这是可能的

results = [r for (r,) in results]
Run Code Online (Sandbox Code Playgroud)

查询是否可以直接返回该表单,而不必自己处理它?

python sqlalchemy

19
推荐指数
3
解决办法
8184
查看次数

Python - SqlAlchemy:将元组列表转换为原子值列表

在处理我的Python项目(我的第一个应用程序)时,我在对数据库运行查询时遇到了一个问题:我得到一个包含单个值的元组列表,如:[(value1,),(value2, )]所涉及的表具有多对多关系,ORM是SQLAlchemy.

我的解决方案是使用foreach循环:

def get_user_roles(user_id):

    the_roles = db.session.query(Role.role).filter(Role.users.any(id=user_id)).all()
    response = []
    length = len(the_roles)
    for key in range(length):
        the_roles[key] = list(the_roles[key])
        response.append(the_roles[key][0])

    return response
Run Code Online (Sandbox Code Playgroud)

为了更好地理解,您可以在这里查看:https: //github.com/Deviad/adhesive/blob/master/theroot/users_bundle/helpers/users_and_roles.py

我正在寻找一种更好的方法,因为我知道foreach循环非常耗时.

谢谢.

python sqlalchemy

4
推荐指数
1
解决办法
2155
查看次数

标签 统计

python ×3

sqlalchemy ×3

orm ×1