如何使用python修改存储过程的输入值

时间:2017-05-13 23:04:53

标签: python sql sql-server python-3.x

目前,我正在尝试修改我使用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',它支持我的观点。我是正确的思考还是我完全错了?

如何解决此问题?欢迎任何想法,建议和改进;)

1 个答案:

答案 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)

可以说更容易看到流浪标点符号。