我需要创建一个动态SQL查询,该查询根据不同的参数/变量的存在和值而变化:
所以,我有这样的东西:
def create_query(用户=无,最大=无,列表=无)
qs = 'SELECT N.status'
if user:
qs = qs.join('U.email')
qs = join('from notes as N)'
if user:
qs = 'LEFT JOIN users AS U on N.user_id=U.id'
if max:
qs = qs.join('where max=') + max
if list:
qs = qs.join('where fame_values in list')
....
我大约有20个变量可以更改查询,因此我正在寻找更多的pythonic(例如带条件的列表推导),但是要查找字符串
答案 0 :(得分:1)
您可以创建一个函数,该函数根据传递给它的参数创建查询。
考虑以下示例:
def create_query(user, max_value = None):
query = 'SELECT N.status'+ (' U.email' if user else ' ') + ' from notes as N' + (' LEFT JOIN users AS U on N.user_id=U.id' if user else ' ') + (' where max={}'.format(max_value) if max_value else " ")
return query
query = create_query(user=True,max_value=10)
# SELECT N.status U.email from notes as N LEFT JOIN users AS U on N.user_id=U.id where max=10
query = create_query(user=False)
# SELECT N.status from notes as N
query = create_query(user=True)
# SELECT N.status U.email from notes as N LEFT JOIN users AS U on N.user_id=U.id
答案 1 :(得分:0)
如果您正在使用python,我建议构建查询 在您的代码中,并使用cx_Oracle连接到数据库 (或其他模块,如果您有其他数据库)
如果您真的想用纯sql来做, 您需要做的是对所有内容进行主连接, 并用例显示所需的数据。
case when x then y
when b then c
else null end case1,
case2 when x then t
when g then c
else null end case2
from a join b join c join...
一些您确实想做的例子会有所帮助。