更新!我仍在寻找某种方式来指示用户对这些日期进行更新,但我采用了这种方法:
我在SQL文件中声明了一个变量,所以它看起来像:
declare @date date = DATE
Select * from table WHERE date = @date
and then in my python it looks like:
DATE = date(2022, 10, 31)
def sql_data(sql_path, date):
with open(sql_path) as sql_file:
sql = sql_file.read()
sql = sql.replace("DATE", "'{}'".format(date.strftime('%Y-%m-%d')))
df = sql_data('sql_path', DATE)
df.to_csv('csv path', index=False)
我有一个Python脚本,它将执行我的SQL脚本并创建一个csv文件。我需要每月运行这个csv文件——我正在尝试做两件事:
- 在我的Python代码执行并运行SQL以创建csv文件之前,我需要首先替换SQL语句中的日期,并将其更新为我将运行此报告的任何月份
- 强制运行Python的用户输入一个日期,该日期将替换我的SQL语句中的日期。我想要一个故障保护,在更新日期之前不会让用户继续使用代码
SQL语句如下所示:从表中选择*作为x其中x.date="2022年10月30日">
我需要将字符串"MM/DD/YYYY"替换为我想要的任何日期,格式为"MM/DD/CYYYY"。一个问题是x.date值将不相同,因为此SQL语句将按月运行。我需要x.date的值以用户输入的内容为基础。
到目前为止,我有这个(忽略我没有建立连接——我只是从这个描述中去掉了它(
new_date = input("Enter in the reporting date here (format: 'MM/DD/YYYY')")
with open('myreport.sql', 'r') as sqlfile:
str.replace(' .date = "XXXXX", 'new_date')
我不确定如何替换sql文件中的字符串,因为每次运行此报告时,日期值不一定一致。
SQL语句如下所示:从表中选择*作为x其中x.date='10/31/2022'(日期不一定是10/31/2022(
您仍然没有发布任何请求的代码,但我仍然会尝试一下。
您想要的是一个参数化查询
cursor.execute("select * from table as x where x.date = (?)", (user_input))
通过这种方式,您可以定义user_input并将其用作查询的一部分。
您也可以简单地格式化一个字符串:
query = f"select * from table as x where x.date = {user_input}"
但这是有问题的,因为用户可能会在查询中注入不需要的代码。