Python Multiline String은 들여 쓰기를 변경합니다.
저는 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 코드를 보내야하는 또 다른 텍스트 필드가 있습니다 ) 들여 쓰기를 변경하거나 최소한 줄의 시작 부분부터 모든 줄을 시작하지 않고 코드를 보내야 합니다. . 누군가 귀하의 의견을 제공 할 수 있습니까?
컴파일러는 코드가 다음과 같은 경우에만 코드를 컴파일합니다.
고마워, 산 제이.
답변
이 문제에 대한 해결책은 매우 간단합니다. 여기에서 그대로 작동하기를 바라면서 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 클라이언트에서이 변수의 출력을 인쇄하고 확인하십시오.