我正在尝试使用列名列表(以下定义为queries
)联接文本查询列表(以下定义为column_names
)。两者都以字符串列表形式给出。
请注意,不涉及数据库,我只是尝试从其他查询构造一个查询。
我尝试过的事情:
columns = [column(cn) for cn in column_names]
texts = [text(q).columns(*columns) for q in queries]
join = reduce(lambda t1, t2: t1.join(t2), texts)
但随后出现此错误:
NoForeignKeysError: Can't find any foreign key relationships between 'T0' and 'T1'.
如果我修改第三行以包括列名,该列名是column_names
的成员(在本例中为my_column_name
),则它起作用:
join = reduce(lambda t1, t2: t1.join(t2, t1.c.my_column_name == t2.c.my_column_name), texts)
但是,我必须使用column_names
中给出的所有列名进行联接(理想情况下,使用USING
子句而不是ON
子句,即使在SQLAlchemy中也是可能的)
我可以根据每列名称以及每对onclause
和t1
创建一个t2
并将其传递给join
,但这不是很干净。
完成此操作的一种优雅方法是什么?