在SQL python中添加非日期时间变量作为函数参数



我有一个函数可以执行许多不同日期的SQL查询。

我想要的是将所有日期和其他查询变量作为函数参数传递,然后只执行函数。我已经找到了如何对日期时间变量执行此操作,如下所示。但我也有一个查询,它查看数据库中的特定campaign_names,并将其作为字符串提取。我希望能够将这些字符串作为函数参数传递,但我还没有在SQL查询中找到正确的语法。

def Camp_eval(start_date,end_1M,camp1,camp2,camp3):

query1 = f"""SELECT CONTACT_NUMBER, OUTCOME_DATE
FROM DATABASE1
where OUTCOME_DATE >= (to_date('{start_date}', 'dd/mm/yyyy')) 
and OUTCOME_DATE < (to_date('{end_1M}', 'dd/mm/yyyy'))"""
query2 = """SELECT CONTACT_NUMBER
FROM DATABASE2
WHERE (CAMP_NAME = {camp1} or
CAMP_NAME = {camp2} or
CAMP_NAME = {camp3})"""
Camp_eval('01/04/2022','01/05/2022','Camp_2022_04','Camp_2022_05','Camp_2022_06')

参数start_dateend_1M{}括号配合使用很好,但作为字符串的camp变量不会返回任何结果,即使数据库中有符合这些条件的结果(如果我将它们直接写入查询(。

任何帮助都将不胜感激!!

请不要使用f-string创建SQL查询!最有可能的是,用于访问数据库的任何库都已经有了创建查询的方法:SQLite文档(检查代码示例(。另一个例子:cur.execute("SELECT * FROM tasks WHERE priority = ?", (priority,))

这种方式不仅更安全(修复了@d-malan在评论中提到的SQL注入问题(,而且还消除了在SQL中如何表示数据的需要——库将自动将日期、字符串等转换为需要转换的内容。因此,您的问题可以通过使用适当的仪器来解决。

最新更新