Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.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
尝试不在SQL查询中硬编码日期范围(Python、SQL server)_Python_Sql_Sqlalchemy_Pyodbc - Fatal编程技术网

尝试不在SQL查询中硬编码日期范围(Python、SQL server)

尝试不在SQL查询中硬编码日期范围(Python、SQL server),python,sql,sqlalchemy,pyodbc,Python,Sql,Sqlalchemy,Pyodbc,我正在使用Python连接到SQL Server数据库并执行几个“选择”类型的查询,这些查询包含以特定方式编写的日期范围。所有这些查询都有相同的日期范围,所以我不想硬编码,而是希望将其作为字符串,并仅在需要时在一个位置更改它。 到目前为止,我发现我可以使用datetime模块和以下逻辑将日期转换为字符串: from datetime import datetime start_date = datetime(2020,1,1).strftime("%Y-%m-%d") end

我正在使用Python连接到SQL Server数据库并执行几个“选择”类型的查询,这些查询包含以特定方式编写的日期范围。所有这些查询都有相同的日期范围,所以我不想硬编码,而是希望将其作为字符串,并仅在需要时在一个位置更改它。 到目前为止,我发现我可以使用datetime模块和以下逻辑将日期转换为字符串:

from datetime import datetime
start_date = datetime(2020,1,1).strftime("%Y-%m-%d")
end_date = datetime(2020,1,31).strftime("%Y-%m-%d")
查询示例:

select * from where xxx='yyy' and time between start_date and end_date
我怎样才能让它工作

编辑 我的代码:


谢谢大家的意见,我已经找到了答案,可以让查询正常工作了。变量应如下所示:

start_date = date(2020, 1, 1)
end_date = date(2020, 1, 31)
和SQL查询,如:

sql_query = f""" SELECT TOP 1000 
      [mtime]
      ,[avgvalue]
  FROM [monitor2].[dbo].[t_statistics_agg]
  where place = 'Europe' and mtime between '{start_date}' and '{end_date}'
  order by [mtime] asc;"""

您面临的问题是什么?我编写的select查询无法以这种方式编写。请尝试将开始日期和结束日期放在引号中。另外,打印查询并显示代码。你有什么错误吗?把我的代码添加到帖子里了。它在这种形式下不起作用。但是,如果我只使用字符串“2020-01-01”和“2020-01-31”,它就可以工作。例如,有关如何正确、安全地将参数传递给Pandas中的SQL查询的指针,请参见。根据
mtime
列的类型,您根本不需要自己转换Python日期时间,因为如果使用适当的占位符并单独传递参数,您的驱动程序将为您完成转换。
sql_query = f""" SELECT TOP 1000 
      [mtime]
      ,[avgvalue]
  FROM [monitor2].[dbo].[t_statistics_agg]
  where place = 'Europe' and mtime between '{start_date}' and '{end_date}'
  order by [mtime] asc;"""