Перенести 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) ; """)

Обратите внимание на то, что они используют три двойных кавычки.

→ Ссылка