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