Перенести SQL-запрос по строкам
Так как очень большой запрос, необходимо его переносить по строкам в коде Python. Обычный знак для переноса (\) не работает внутри запроса (получается ошибка)
cursor.execute("WITH workcenter_desc AS (SELECT WorkCenter, medium AS Description \
FROM APRISOPROD_REPLICATION.dbo.WORK_CENTER wc \
LEFT JOIN APRISOPROD_REPLICATION.dbo.TEXT_TRANSLATION tt \
ON wc.TextID = tt.TextID \
WHERE tt.LanguageID = '1033' \
), \
wip_order_desc \
AS \
( \
SELECT \
wot.WipOrderType, \
tt.Medium AS description \
FROM APRISOPROD_REPLICATION.dbo.WIP_ORDER_TYPE wot \
LEFT JOIN APRISOPROD_REPLICATION.dbo.TEXT_TRANSLATION tt ON wot.TextID = tt.TextID \
WHERE tt.LanguageID = '1033' \
) \
WHERE twp.CreatedOn > DATEADD(DAY,-365,CURRENT_TIMESTAMP) ; ")
row = cursor.fetchone()
rows = []
data = []
for ro in row.cursor_description:
rows.append( ro[0] )
for dat in cursor.fetchall():
data.append( list(dat) )
Как тогда мне сделать?
Ответы (1 шт):
Автор решения: Roman Konoval
→ Ссылка
Используйте многострочные строковые литералы:
cursor.execute("""WITH workcenter_desc AS (SELECT WorkCenter, medium AS
Description
FROM APRISOPROD_REPLICATION.dbo.WORK_CENTER wc
LEFT JOIN APRISOPROD_REPLICATION.dbo.TEXT_TRANSLATION tt
ON wc.TextID = tt.TextID
WHERE tt.LanguageID = '1033'
),
wip_order_desc
AS
(
SELECT
wot.WipOrderType,
tt.Medium AS description
FROM APRISOPROD_REPLICATION.dbo.WIP_ORDER_TYPE wot
LEFT JOIN APRISOPROD_REPLICATION.dbo.TEXT_TRANSLATION tt ON wot.TextID = tt.TextID
WHERE tt.LanguageID = '1033'
)
WHERE twp.CreatedOn > DATEADD(DAY,-365,CURRENT_TIMESTAMP) ; """)
Обратите внимание на то, что они используют три двойных кавычки.