Python 如何在SQLAlchemy中将带有in子句的数据库查询转换为列表列表
我有以下SQLAlchemy数据库查询Python 如何在SQLAlchemy中将带有in子句的数据库查询转换为列表列表,python,sqlalchemy,Python,Sqlalchemy,我有以下SQLAlchemy数据库查询 test_query = Unit.query.filter(Unit.id_1.in_(('3D0U|1|A|G|1', '3D0U|1|A|C|160'))) 我希望此查询的结果是一个列表,其中的行对应于in子句中的每个元素,作为一个单独的列表。目前,我得到了一个列表中的所有行 这就是我尝试过的 result = [] for row in test_query: result.append[(row.id_2)] 当我打印出结果时,这就是
test_query = Unit.query.filter(Unit.id_1.in_(('3D0U|1|A|G|1', '3D0U|1|A|C|160')))
我希望此查询的结果是一个列表,其中的行对应于in子句中的每个元素,作为一个单独的列表。目前,我得到了一个列表中的所有行
这就是我尝试过的
result = []
for row in test_query:
result.append[(row.id_2)]
当我打印出结果时,这就是我得到的结果
["3D0X|1|A|C|160", "4ERJ|1|A|C|160", "4ERL|1|A|C|160", "3D0X|1|A|G|1", "4ERJ|1|A|G|1", "4ERL|1|A|G|1"]
所需输出为:
[["3D0X|1|A|C|160", "4ERJ|1|A|C|160", "4ERL|1|A|C|160"], ["3D0X|1|A|G|1", "4ERJ|1|A|G|1", "4ERL|1|A|G|1"]]
单位表中的样本数据如下所示
"id_1","chain_1","pdb_id_1","id_2","chain_2","pdb_id_2"
"3D0U|1|A|G|1","A","3D0U","3D0X|1|A|G|1","A","3D0X"
"3D0U|1|A|G|1","A","3D0U","4ERJ|1|A|G|1","A","4ERJ"
"3D0U|1|A|G|1","A","3D0U","4ERL|1|A|G|1","A","4ERL"
"3D0U|1|A|C|160","A","3D0U","3D0X|1|A|C|160","A","3D0X"
"3D0U|1|A|C|160","A","3D0U","4ERJ|1|A|C|160","A","4ERJ"
"3D0U|1|A|C|160","A","3D0U","4ERL|1|A|C|160","A","4ERL"
感谢您的帮助。谢谢这可以通过以下方式解决:首先按查询中的
Unit.id_1
排序,然后
result=[[unit.id_2 for units in units]for id_1,units in itertools.groupby(test_查询,lambda x:x.id_1)]
对于postgresql,还有一个sqlalchemy.func.array\u agg
,可以用来构造一个由id\u 1
分组的id\u 2
数组
作为参考,描述了itertools.groupby的功能。除非最近添加了此功能,否则SQLAlchemy无法为您执行此操作,您需要根据unit table中的样本数据自行对SQLAlchemy返回的数据进行后期处理。我认为,如果可能,最好花更多时间设计数据库。例如,是否应该有带有属性
id
和name
的模型Chain
(即表Chain
),然后引用这些条目(整型)。这是否取决于python版本?它是否适用于Python2.7?Hakala得到一个TypeError:“function”对象不可用iterable@TheEmperor我以错误的顺序编写了参数当我尝试此操作时,我得到了TypeError:IsnotJSON serializable。有没有办法解决这个问题?@我想我应该为id_1,itertools.groupby(test_query,lambda x:x.id_1)编写result=[[unit.id_2 for unit in units]的