Python 函数使用循环生成查询字符串,只返回最后一个循环生成字符串

Python 函数使用循环生成查询字符串,只返回最后一个循环生成字符串,python,python-3.x,function,text,Python,Python 3.x,Function,Text,我有一个函数,用于为sql查询构建字符串 def create_text(tablelist=None, fieldlist=None): alphalist = [] alpha = 'a' for i in range(0, len(tablelist)): alphalist.append(alpha) alpha = chr(ord(alpha) + 1) for i,v in enumerate(alphalist): if i + 1 == len(a

我有一个函数,用于为sql查询构建字符串

def create_text(tablelist=None, fieldlist=None):
alphalist = []
alpha = 'a'
for i in range(0, len(tablelist)): 
    alphalist.append(alpha) 
    alpha = chr(ord(alpha) + 1) 

for i,v in enumerate(alphalist):
    if i + 1 == len(alphalist):
        last=True
    else:
        last=False
    y=str(v)
    text ="SELECT "+', '.join([y+ '.' +x for x in fieldlist]) + ' FROM ' \
    +str(tablelist[i]) + " as " + str(y)  
    if not last:
        text = text + " UNION ALL"
    print(text)
return text
我这样称呼它

text = create_text(tablelist = ['table1', 'table2'], fieldlist = ['v1','v2'])
它在第二个循环后打印字符串时给我这个输出

SELECT a.v1, a.v2 FROM table1 as a UNION ALL
SELECT b.v1, b.v2 FROM table2 as b
但是,“text”本身的值是从函数返回的,如果我只是打印它的话

print(text)

这只是循环中的最后一个值,因为它覆盖了文本的值。我只是不知道如何通过循环并在每次迭代中连接文本,以便得到我想要的返回值,这是文本的值=

"SELECT a.v1, a.v2 FROM table1 as a UNION ALL SELECT b.v1, b.v2 FROM table2 as b"

谢谢

您的代码在循环中重新定义了
文本
,因此只会返回最后的循环迭代文本

您可以对代码进行大量清理,并得出以下结论:

def create_text(tablelist=None, fieldlist=None):
    # collects parts to be str.joined later
    parts = []

    # iterate the tablenames directly
    for i, table in enumerate(tablelist):
        # no neeed to precompute, simply use i to get a new alias
        alias = chr(ord('a')+i)  
        # string interpolation style formating for bonus points 
        fields = ', '.join( f"{alias}.{x}" for x in fieldlist)
        # collect in list
        parts.append( f"SELECT {fields} FROM {table} as {alias}")

    # returned joined list
    return " UNION ALL\n".join(parts)

text = create_text(tablelist = ['table1', 'table2'], fieldlist = ['v1','v2'])

print(text)
得到

SELECT a.v1, a.v2 FROM table1 as a UNION ALL
SELECT b.v1, b.v2 FROM table2 as b
每次需要连接文本时,将它们收集到一个列表中,然后使用
str.join()
-这样连接字符串不需要中间字符串

SELECT a.v1, a.v2 FROM table1 as a UNION ALL
SELECT b.v1, b.v2 FROM table2 as b