Python Multiline String cambia il rientro

Sep 14 2020

Sto lavorando a un'automazione con Python e Selenium. Devo incollare un blocco di codici SQL e Java Script nell'area di testo del sito web. Ho usato molti modi per inviare le stringhe, ma cambia il rientro. C'è un modo per inviare i codici / stringhe senza modifiche al rientro? Ho usato tutto quanto sotto e niente ha funzionato,

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

Codice:

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

Produzione:

È l'output

Per questo motivo il compilatore non compila il codice e restituisce un errore.

Devo inviare questi SQL e Java Script ( ho un altro campo di testo in cui devo inviare codici JS con condizioni For Loops e IF ) Codici senza alterare il rientro o almeno iniziare tutte le righe dall'inizio della riga . Qualcuno può fornire i tuoi input?

Il compilatore compila i codici solo se il codice è come di seguito.

Grazie, Sanjay.

Risposte

JaspreetKaur Sep 24 2020 at 06:45

La soluzione a questo problema è molto semplice. Devi solo copiare e incollare la query SQL sperando che funzioni qui così com'è. La cosa qui in Python è che è sensibile al rientro. un trattino sbagliato causerebbe un problema non intenzionale. Ora, d'altra parte, le query SQL e il codice JavaScript, entrambi non sono sensibili al rientro. Questi dipendono da; (punto e virgola) per interrompere la riga. Ciò significa che anche se specifichi 300 comandi in una riga, separandoli ciascuno con un; (punto e virgola) i comandi verranno eseguiti senza problemi. Ma lo stesso non funzionerà qui in caso di Python.

Se provi il codice seguente, funzionerà per te e otterrai i risultati attesi.

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

Prova a stampare e verificare l'output di questa variabile nel tuo client SQL prima di utilizzarlo effettivamente.