目前,我正在尝试修改使用 Python 执行的以下存储过程的两个输入值。
country_cursor.execute(
"[DEV].[DevelopmentSchema].[QA_Extractor] @start_date='2017-05-05', @end_date='2017-05-11'")
我不想每天运行这个程序并从代码中手动更改开始日期和结束日期,而是尝试创建一个提示,在其中输入我想要查找检索的日期。
到目前为止,我已经完成了以下工作:
end_date = str(datetime.now()).rpartition(' ')[0]
start_date = str(datetime.now() - timedelta(days=7)).rpartition(' ')[0]
country_cursor.execute(
"[DEV].[DevelopmentSchema].[QA_Extractor] @start_date='2017-05-05', @end_date= "+"'"+end_date+"'"+"\"")
我刚刚用变量替换了一个输入日期,但是当我执行此程序时,遇到以下 SQL 错误:
pypyodbc.ProgrammingError: ('42000', '[42000] [Microsoft][ODBC SQL Server
Driver][SQL Server]An object or column name is missing or empty. For SELECT
INTO statements, verify each column has a name. For other statements, look
for empty alias names. Aliases defined as "" or [] are not allowed. Change
the alias to a valid name.')
我的观点是,存储过程不接受此变量作为结束日期,因此,要查找检索的列不存在。我还读过SQL Server query erroring with 'An object or column name is missing or empty'这支持了我的观点。我的想法是正确的还是完全错误的?
如何解决这个问题?欢迎任何想法、建议和改进;)
最佳答案
如果我这样做:
print("[DEV].[DevelopmentSchema].[QA_Extractor] @start_date='2017-05-05', @end_date= "+"'"+end_date+"'"+"\"")
我明白了:
[DEV].[DevelopmentSchema].[QA_Extractor] @start_date='2017-05-05', @end_date= '2017-05-14'"
在我看来,这个查询字符串的末尾有一个杂散的"
。
部分问题在于您过于努力地将日期格式化为字符串。
我猜有
from datetime import *
在你的代码的顶部(丑陋,但不是你的错)。如果是这样,你可以这样做
start_date = datetime.now() - timedelta(days=7)
end_date = datetime.now()
query_string = f"[DEV].[DevelopmentSchema].[QA_Extractor] @start_date='{start_date:%Y-%m-%d}', @end_date='{end_date:%Y-%m-%d'}"
country_cursor.execute(query_string)
这可以说更容易看到杂散的标点符号。
关于python - 如何用python修改存储过程的输入值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43958795/