Python-从列表创建连接条件

Python-从列表创建连接条件,python,Python,我有两个列表,用于两个表及其键列 keycol1 = [col1,col2] keycol2 = [col3,col4] 我想用这两个列作为连接条件来构建一个sql查询 for column1,column2 in zip(keycol1,keycol2): join = "table1."+ column1 + " = " + "table2." + column2 and qry = "select * from table1 join table2 on " + join

我有两个列表,用于两个表及其键列

keycol1 = [col1,col2]
keycol2 = [col3,col4]
我想用这两个列作为连接条件来构建一个sql查询

for column1,column2 in zip(keycol1,keycol2):   
    join = "table1."+ column1 + " = " + "table2." + column2 and
qry = "select * from table1 join table2 on " + join 
但这给了我一个额外的和最后。如何避免呢

预期查询:

select * from table1 join table2 on table1.col1 = table2.col3 and  table1.col2 = table2.col4
这里有一个方法

keycol1 = ['col1', 'col2']
keycol2 = ['col3', 'col4']

join = ' and '.join(['table1.{0} = table2.{1}'.format(c1, c2) \
                     for c1, c2 in zip(keycol1, keycol2)])

qry = "select * from table1 join table2 on " + join 

# 'select * from table1 join table2 on table1.col1 = table2.col3 and table1.col2 = table2.col4'
解释

使用str.format的列表理解来形成每个条件。 使用“和”组合您的条件。加入。
您还可以使用map函数和join来执行此操作:

输出:

select * from table1 join table2 on table1.col1 = table2.col3 and table1.col2 = table2.col4

首先修复语法错误可能是他在这里键入而不是复制粘贴。你不应该使用+an字符串,也不能在SQL查询字符串上使用它。join[table1.,column1,=table2.,column2]比重复连接两个字符串更有效,但主要问题是像这样构造特殊SQL,至少在不首先验证keycol1和keycol2的值的情况下。更好的办法是找到一个好的SQL库来为您构造查询。
select * from table1 join table2 on table1.col1 = table2.col3 and table1.col2 = table2.col4