Python Multiline String zmienia wcięcie
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
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.