Python:使用变量从文件调用查询

时间:2017-06-23 16:42:07

标签: python sql

我的python脚本中有一些查询,它们也使用变量作为参数来检索数据。 '''SELECT * FROM order_projections_daily WHERE days >= ''' + each + '''AND days < ''' + next_monday

如何将这样的查询存储在单独的文件中并直接从那里调用,而不是在代码中填写它们?

我已经尝试将查询存储在一个文件中并将其作为字符串调用,但它并不适用于变量。它适用于: '''SELECT * FROM order_projections_daily'''

这是一个非常简单的查询,我在实际案例中使用了更复杂的查询。

2 个答案:

答案 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

中的名称绑定