我的python脚本中有一些查询,它们也使用变量作为参数来检索数据。
'''SELECT * FROM order_projections_daily WHERE days >= ''' + each + '''AND days < ''' + next_monday
如何将这样的查询存储在单独的文件中并直接从那里调用,而不是在代码中填写它们?
我已经尝试将查询存储在一个文件中并将其作为字符串调用,但它并不适用于变量。它适用于:
'''SELECT * FROM order_projections_daily'''
这是一个非常简单的查询,我在实际案例中使用了更复杂的查询。
答案 0 :(得分:2)
使用参数化字符串 -
'''SELECT * FROM order_projections_daily WHERE days >= %(start)s AND days < %(end)s'''
稍后,在执行查询时,构建一个类似于dict
的参数:
params = {'start': ..., 'end': ...}
然后应将这些参数传递给DBC驱动程序函数,该函数将负责插入参数:
cursor.execute(query, params)
注意:不将格式字符串注入到查询中,您可以通过这种方式注入SQL。
答案 1 :(得分:-4)
使用python字符串格式。
在单独的文件中保存查询,如下所示:
query = "select * from my_persons where name = {name} and age = {age}"
在python文件中,以这种方式格式化查询:
sql = query.format(name="jack", age=27)
您可以将所有查询保存在单独的python文件中作为字符串值,并将所有查询导入到您的代码中的任何位置。在我的例子中,我假设查询保存在一个单独的python文件中。
格式化查询
query='''SELECT * FROM order_projections_daily WHERE days >={each} AND days < {next_monday}
将其格式化为:
sql = query.format(each=each, next_monday=next_monday)
使用格式方法或%或甚至连接而不是使用字符串连接是一个好习惯,因为字符串连接会创建中间字符串对象。
好的,那么格式化是一个坏主意,看看这个。 oracle https://stackoverflow.com/a/33882805/2196290
中的名称绑定