Python Multiline String ändert den Einzug
Ich arbeite an einer Automatisierung mit Python und Selen. Ich muss einen Block mit SQL- und Java-Skriptcodes in den Textbereich der Website einfügen. Ich habe viele Möglichkeiten verwendet, um die Zeichenfolgen zu senden, aber es ändert die Einrückung. Gibt es eine Möglichkeit, die Codes / Zeichenfolgen ohne Änderungen an der Einrückung zu senden? Ich habe alles unten verwendet und nichts hat funktioniert,
textwrap.dedent(prdrsql1)
textwrap.dedent(prdrsql1).lstrip()
(prdrsql1).lstrip()
(prdrsql1).strip()
Code:
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""")
Ausgabe:
Das ist die Ausgabe
Aus diesem Grund kompiliert der Compiler den Code nicht und gibt einen Fehler aus.
Ich muss diese SQL- und Java-Skripts senden ( ich habe ein weiteres Textfeld, in das ich JS-Codes mit For-Schleifen- und IF-Bedingungen senden muss ), ohne die Einrückung zu ändern oder zumindest alle Zeilen vom Zeilenanfang aus zu beginnen . Kann jemand bitte Ihre Eingaben machen?
Der Compiler kompiliert die Codes nur, wenn der Code wie folgt ist.
Danke, Sanjay.
Antworten
Die Lösung für dieses Problem ist sehr einfach. Sie kopieren einfach die SQL-Abfrage und hoffen, dass sie hier so funktioniert, wie sie ist. Die Sache hier in Python ist, dass es einrückungsempfindlich ist. Ein falscher Einzug würde zu unbeabsichtigten Problemen führen. Auf der anderen Seite sind SQL-Abfragen und JavaScript-Code nicht einrückungsempfindlich. Diese hängen ab von; (Semikolon), um die Linie zu brechen. Dies bedeutet, dass selbst wenn Sie 300 Befehle in einer Zeile angeben, die jeweils durch a getrennt sind. (Semikolon) Die Befehle werden problemlos ausgeführt. Aber das gleiche funktioniert hier bei Python nicht.
Wenn Sie den folgenden Code ausprobieren, funktioniert dies für Sie und Sie erhalten die erwarteten Ergebnisse.
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")
Versuchen Sie, die Ausgabe dieser Variablen in Ihrem SQL Client zu drucken und zu überprüfen, bevor Sie sie tatsächlich verwenden.