目前,我正在尝试修改我使用Python执行的以下存储过程的两个输入值。
country_cursor.execute(
"[DEV].[DevelopmentSchema].[QA_Extractor] @start_date='2017-05-05', @end_date='2017-05-11'")
我不想每天都运行这个程序并从代码中手动更改start_date和end_date,而是尝试创建一个提示,我可以在其中键入我想要查找的日期。
到目前为止,我已经完成了以下工作:
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',它支持我的观点。我是正确的思考还是我完全错了?
如何解决此问题?欢迎任何想法,建议和改进;)
答案 0 :(得分:1)
如果我这样做:
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)
可以说更容易看到流浪标点符号。