Python Multiline String은 들여 쓰기를 변경합니다.

Sep 14 2020

저는 Python 및 Selenium으로 자동화 작업을하고 있습니다. 웹 사이트의 텍스트 영역에 SQL 및 Java Script 코드 블록을 붙여 넣어야합니다. 문자열을 보내는 데 여러 가지 방법을 사용했지만 들여 쓰기가 변경되었습니다. 들여 쓰기를 변경하지 않고 코드 / 문자열을 보내는 방법이 있습니까? 나는 아래를 모두 사용했지만 아무것도 작동하지 않았습니다.

textwrap.dedent(prdrsql1)
textwrap.dedent(prdrsql1).lstrip()
(prdrsql1).lstrip()
(prdrsql1).strip()

암호:

prdrsql1 = ("""
        SELECT DISTINCT CAST(q2.SubjectId AS varchar(32)) as SubjectId, q2.SubjectNum, 
'A' as ItemOid,
q1.B as VisitId,
q1.[C] as VisitRepeatKey,
q1.[D] AS FormOid,
q1.E as FormRepeatKey,
'Y' as Data
FROM Table.A.ABC q2 with (NOLOCK)
    Right Join (
    select hashkey, SubjectNum, 
    (CASE WHEN C is null THEN 'SUBJECT' ELSE [D] END) AS 
    [D], 
    (CASE WHEN G is null THEN 'SUBJECT' ELSE [G] END) AS 
    [G], 
    FormOID, [DD], AB,ABC
    from Table.A.ABC with (NOLOCK) where abc=123
    ) q1
    on q1.abc = q2.qbc
    AND q1.AA = 1 and AAA=1""")

산출:

출력입니다

이 때문에 컴파일러는 코드를 컴파일하지 않고 오류를 제공합니다.

이 SQL 및 Java 스크립트 를 보내야합니다 (For 루프 및 IF 조건이있는 JS 코드를 보내야하는 또 다른 텍스트 필드가 있습니다 ) 들여 쓰기를 변경하거나 최소한 줄의 시작 부분부터 모든 줄을 시작하지 않고 코드를 보내야 합니다. . 누군가 귀하의 의견을 제공 할 수 있습니까?

컴파일러는 코드가 다음과 같은 경우에만 코드를 컴파일합니다.

고마워, 산 제이.

답변

JaspreetKaur Sep 24 2020 at 06:45

이 문제에 대한 해결책은 매우 간단합니다. 여기에서 그대로 작동하기를 바라면서 SQL 쿼리를 복사하여 붙여 넣습니다. 여기 파이썬에서 중요한 것은 들여 쓰기에 민감하다는 것입니다. 잘못된 들여 쓰기는 의도하지 않은 문제를 일으킬 수 있습니다. 반면에 SQL 쿼리와 JavaScript 코드는 모두 들여 쓰기를 구분하지 않습니다. 이것들은에 의존합니다; (세미콜론) 줄을 끊습니다. 즉, 한 줄에 300 개의 명령을 지정하더라도 각 명령은; (세미콜론) 명령은 번거 로움없이 실행됩니다. 그러나 파이썬의 경우에도 마찬가지입니다.

아래 코드를 시도하면 작동하며 예상되는 결과를 얻을 수 있습니다.

prdrsql1 = ("SELECT DISTINCT CAST(q2.SubjectId AS varchar(32)) as SubjectId, q2.SubjectNum, 'A' as ItemOid, q1.B as VisitId, q1.[C] as VisitRepeatKey, q1.[D] AS FormOid, q1.E as FormRepeatKey, 'Y' as Data FROM Table.A.ABC q2 wit (NOLOCK) Right Join ( select hashkey, SubjectNum, (CASE WHEN C is null THEN 'SUBJECT' ELSE [D] END) AS [D], (CASE WHEN G is null THEN 'SUBJECT' ELSE [G] END) AS [G], FormOID, [DD], AB,ABCfrom Table.A.ABC with (NOLOCK) where abc=123) q1 on q1.abc = q2.qbc AND q1.AA = 1 and AAA=1")

실제로 사용하기 전에 SQL 클라이언트에서이 변수의 출력을 인쇄하고 확인하십시오.