Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python替换外部SQL查询中的引用值_Python_Sql - Fatal编程技术网

Python替换外部SQL查询中的引用值

Python替换外部SQL查询中的引用值,python,sql,Python,Sql,我使用下面的简单查询根据日期从表中进行选择: select * from tbl where date = '2019-10-01' 简单查询是从同一服务器上的多个表中提取信息的更大查询的一部分。我在服务器上没有执行权限,因此无法安装存储过程来简化我的生活。相反,我将查询读入Python并尝试替换单引号字符串中的某些值,例如: select * from tbl where date = '<InForceDate>' 我使用下面一个简单的Python函数替换为另一个值,比如20

我使用下面的简单查询根据日期从表中进行选择:

select * from tbl where date = '2019-10-01'
简单查询是从同一服务器上的多个表中提取信息的更大查询的一部分。我在服务器上没有执行权限,因此无法安装存储过程来简化我的生活。相反,我将查询读入Python并尝试替换单引号字符串中的某些值,例如:

select * from tbl where date = '<InForceDate>'
我使用下面一个简单的Python函数替换为另一个值,比如2019-10-01,但是当我查看输出时str.replace函数并没有替换。然而,我尝试了一个这样的值,它不在引号中,它起了作用。我确信我遗漏了一些基本的东西,但是我还没有揭示为什么它在没有引号的情况下工作,而在引号的情况下却失败了

Python:

def generate_sql(sql_path, inforce_date):
    with open(pd_sql_path, 'r') as sql_file:
        sql_string = sql_file.read()
        sql_final = str.replace(sql_string, r'<InForceDate>', inforce_date)

    return(sql_final)

有人能给我指出正确的方向吗?

没关系的人-问题已经解决了,但还没有完全弄清楚原因。我猜是文件编码。

请不要使用字符串替换/插值。这是SQL注入的直接方法。更好的方法是使用参数化查询。谢谢。完全理解。我现在不关心注射。但我同意你的观点,我很确定错误在于你没有给我们看的东西。请提供一份报告。您的未完成,因为我们没有SQL文件。此外,您的函数接收sql_路径并使用pd_sql_路径。