如果已经问过这个问题,我很抱歉,但我认为我不知道通过谷歌搜索合适的解决方案的正确术语.
我想通过它的属性值从对象列表中选择一个对象,例如:
class Example():
def __init__(self):
self.pList = []
def addPerson(self,name,number):
self.pList.append(Person(self,name,number))
class Person():
def __init__(self,name,number):
self.nom = name
self.num = number
a = Example()
a.addPerson('dave',123)
a.addPerson('mike',345)
a.pList #.... somehow select dave by giving the value 123
Run Code Online (Sandbox Code Playgroud)
在我的情况下,数字将始终是唯一的
谢谢您的帮助
我试图通过字段对SQLAlchemy ORM对象进行排序,但具有特定的值顺序(既不是升序也不是降序).如果我在MySQL上做这个查询,它看起来像;
SELECT letter FROM alphabet_table WHERE letter in ('g','a','c','k')
ORDER BY FIELDS( letter, 'g','a','c','k');
Run Code Online (Sandbox Code Playgroud)
输出:
letter
------
g
a
c
k
Run Code Online (Sandbox Code Playgroud)
对于SQLAlchemy,我一直在尝试以下方面:
session.query(AlphabetTable).filter(AlphabetTable.letter.in _(( 'G', 'A', 'C', 'K'))).ORDER_BY(AlphabetTable.letter.in _(( 'G','一", 'C', 'K')))
哪个不起作用......有什么想法吗?这是一个小的一次性常量列表,我可以创建一个包含订单的表然后加入,但这看起来有点太多了.
我有来自外部 postgresql 数据库的 ID 列表。
A = [1,2,3,4,5,6,7,98,0]
Run Code Online (Sandbox Code Playgroud)
我会使用 SQLAlchemy 对数据库进行查询,但我会按 A 列表对 postgresql 中的数据进行排序。
我已经阅读了很多文档,但找不到任何关于如何做到这一点的建议。
所以,最后我会有:
results = session.query(user).limit(20).offset(10).order_by(A)
Run Code Online (Sandbox Code Playgroud)
干杯
更新:
我找到了解决方案,它没有我预期的那么好,但效果很好。无论如何,如果您知道更好的解决方案,请告诉我!
ids = ','.join([str(i) for i in A])
results = session.query(user).filter(user.id.in_(A)).\
limit(20).offset(10).\
order_by(" position(CONCAT(',',users.id::text,',') in ',{0},'.format(ids)")
Run Code Online (Sandbox Code Playgroud)