Python Multiline String zmienia wcięcie

Sep 14 2020

Pracuję nad automatyzacją z Pythonem i Selenium. Muszę wkleić blok kodów SQL i Java Script w obszarze tekstowym na stronie internetowej. Użyłem wielu sposobów, aby wysłać ciągi, ale zmienia to wcięcie. Czy istnieje sposób na wysłanie kodów / ciągów bez zmiany wcięcia? Użyłem wszystkich poniższych i nic nie działało,

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

Kod:

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""")

Wynik:

To jest wyjście

Z tego powodu kompilator nie kompiluje kodu i nie wyświetla błędu.

Muszę wysłać te skrypty SQL i Java ( mam inne pole tekstowe, w którym mam wysłać kody JS, które mają warunki dla pętli i IF ) Kody bez zmiany wcięcia lub przynajmniej rozpoczynając wszystkie wiersze od początku wiersza . Czy ktoś może podać swoje dane wejściowe?

Kompilator kompiluje kody tylko wtedy, gdy kod jest taki jak poniżej.

Dzięki, Sanjay.

Odpowiedzi

JaspreetKaur Sep 24 2020 at 06:45

Rozwiązanie tego problemu jest bardzo proste. Po prostu skopiowałeś wklejone zapytanie SQL z nadzieją, że zadziała tutaj tak, jak jest. Rzecz w Pythonie polega na tym, że jest wrażliwy na wcięcia. niewłaściwe wcięcie spowodowałoby niezamierzone problemy. Z drugiej strony, zapytania SQL i kod JavaScript, oba nie są wrażliwe na wcięcia. Te zależą od; (średnik), aby przełamać linię. Oznacza to, że nawet jeśli określisz 300 poleceń w jednym wierszu, oddzielając każde; (średnik) polecenia będą wykonywane bez kłopotów. Ale to samo nie zadziała tutaj w przypadku Pythona.

Jeśli wypróbujesz poniższy kod, zadziała on dla Ciebie i uzyskasz oczekiwane rezultaty.

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")

Spróbuj wydrukować i zweryfikować wynik tej zmiennej w swoim kliencie SQL przed jej faktycznym użyciem.