python - 如何使用 argparse Python 在 SQL 查询中传递日期范围参数
问题描述
我有 3 个参数日期、名称和国家/地区,此代码允许为我的 SQL 查询传递我的可选参数,例如:
import argparse
parser = argparse.ArgumentParser()
# provide a clear definition of possible arguments
parser.add_argument('--date', type=str, required=False, default=None)
parser.add_argument('--Name', type=str, required=False, default=None)
parser.add_argument('--country', type=str, required=False, default=None)
# get arguments passed in
args = parser.parse_args()
args = args.__dict__
# form statement based on arguments that were given
columns = ' and '.join([x+'=%s' for x in args if args[x]]) #check that args[x] is not None
vars = tuple([args[x] for x in args if args[x]])
statement = "SELECT * FROM TABLE WHERE "+columns
cursor.execute(statement, vars)
我的 SQL 查询:
'SELECT * FROM TABLE WHERE date=%s and name=%s'
我想调用我的脚本:
script.py --date=var1 --name=var3
现在,如果我有一个日期范围,我如何between
在我的 SQL 中添加这个参数和关闭来进行如下查询:
'SELECT * FROM TABLE WHERE date between %s and %s and name=%s'
请问我该怎么做
解决方案
我想这就是你要找的:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--date", nargs=2)
parser.add_argument("--name")
parser.add_argument("--country")
# Use `vars` to get a dict of arguments
args = vars(parser.parse_args())
# Only keep arguments that aren't `None`
args = {k: v for k, v in args.items() if v is not None}
# Base select statement
statement = "SELECT * FROM TABLE"
# This list will hold all the extra conditionals
operators = []
if "date" in args:
# Specifically parse the dates and then delete it from args
operators.append("date BETWEEN {} AND {}".format(*args["date"]))
del args["date"]
# For the remaining args add them to operators
for k, v in args.items():
operators.append("{}={}".format(k, v))
if operators:
# If there are extra operators add them to the base statement
statement = statement + " WHERE " + " and ".join(operators)
print(statement)
我在这里做了什么:
您可以在下面看到一些示例输出:
python3 script.py --date 2020-08-01 2020-12-25 --name alex --country Canada
SELECT * FROM TABLE WHERE date BETWEEN 2020-08-01 AND 2020-12-25 and name=alex and country=Canada
python3 script.py --date 2020-08-01 2020-12-25 --name alex
SELECT * FROM TABLE WHERE date BETWEEN 2020-08-01 AND 2020-12-25 and name=alex
python3 script.py --name alex
SELECT * FROM TABLE WHERE name=alex
python3 script.py
SELECT * FROM TABLE
推荐阅读
- django - 如何使用 Debial 和 Apache 将 google VM 外部 IP 地址重定向到 django 中的 HTTPS?
- java - 正则表达式贪婪或语法错误
- swift - 我是否需要为 App Store 发布创建每个应用程序 iOS 证书?
- c# - c# 多个文件和文件流
- postgresql - 无法使用 Host = localhost 连接到在 docker 中运行的 Postgresql
- java - 用选项填充组合框
- hibernate - 是否可以将 Hibernates 记录为 SQL 代码?
- excel - 使用密码打开时取消保护工作簿
- gitlab-ci-runner - 错误:作业失败:构建目录需要是绝对路径
- javascript - 为什么我会收到此消息“this.getNewsFeedLook 不是函数”,而那是函数