Python c подкдюченной MS SQL, как в запрос SQL вставить переменную на Python
Запрос SQL тащит сводный отчет за период времени формата дд.мес.год, есть начало периода и конец периода. Я так понимаю что в 01.03.2022 (01-число,03-число,2022-число, а разделительные точки это строка). Как создать переменную в Питоне чтоб начало и конец периода вводить с клавиатуры при запущеной программе питона, а не менять даты каждый раз руками в SQL запросе, пример моего когда и выходящая ошибка.
date1 = input()
date2 = input()
for row in cursor.execute("""declare @DStart datetime, @DFinish datetime, @SFio varchar(50), @SPodr varchar(50), @CKorp bit, @CSoft bit, @cMetal bit, @COhr bit
-- начало периода
set @DStart=convert(datetime,'date1',104) --где date1 если вписать руками '01.03.2022'
-- конец периода
set @DFinish=convert(datetime,'date2',104) --где date1 если вписать '09.03.2022' отчет построит
а с моими переменными python переменными date1 и date2 код выдает такую ошибку:
Traceback (most recent call last): File "G:\t_bot\connection.py", line 23, in for row in cursor.execute("""declare @DStart datetime, @DFinish datetime, @SFio varchar(50), @SPodr varchar(50), @CKorp bit, @CSoft bit, @cMetal bit, @COhr bit pyodbc.ProgrammingError: ('42S22', '[42S22] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Недопустимое имя столбца "date1". (207) (SQLExecDirectW); [42S22] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Недопустимое имя столбца "date2". (207)')
Помогите как вводить произвольные даты с клавиатуры при запуске программы?
Ответы (2 шт):
Используйте параметризированные запросы:
for row in cursor.execute("""declare @DStart datetime, @DFinish datetime, @SFio varchar(50), @SPodr varchar(50), @CKorp bit, @CSoft bit, @cMetal bit, @COhr bit
-- начало периода
set @DStart=convert(datetime,%{date1}s,104) --где date1 если вписать руками '01.03.2022'
-- конец периода
set @DFinish=convert(datetime,%{date2}s,104) --где date1 если вписать '09.03.2022' отчет построит",
{'date1' : date1, 'date2' : date2})
https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-execute.html
Все как всегда оказалось намного проще. Просто передал в запрос строку!!! Все работает, всем спасибо!!!
d1 = str(input())
d2 = str(input())
for row in cursor.execute("""declare @DStart datetime, @DFinish datetime, @SFio varchar(50), @SPodr varchar(50), @CKorp bit, @CSoft bit, @cMetal bit, @COhr bit
-- начало периода
set @DStart=convert(datetime,'"""+ d1 +"""',104)
-- конец периода
set @DFinish=convert(datetime,'"""+ d2 +"""' ,104)```