Python Multiline String cambia la sangría

Sep 14 2020

Estoy trabajando en una automatización con Python y Selenium. Tengo que pegar un bloque de códigos SQL y Java Script dentro del Área de texto del sitio web. Usé muchas formas de enviar las cadenas, pero cambia la sangría. ¿Hay alguna forma de enviar los códigos / cadenas sin ningún cambio en la sangría? Usé todo lo siguiente y nada funcionó

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

Código:

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

Salida:

La es la salida

Debido a esto, el compilador no compila el código y da un error.

Necesito enviar estos SQL y Java Script ( tengo otro campo de texto donde tengo que enviar códigos JS que tienen condiciones For Loops y IF ) Códigos sin alterar la sangría o al menos comenzar todas las líneas desde el comienzo de la línea . ¿Alguien puede proporcionar sus aportes?

El compilador compila los códigos solo si el código es el siguiente.

Gracias, Sanjay.

Respuestas

JaspreetKaur Sep 24 2020 at 06:45

La solución a este problema es muy sencilla. Simplemente copie y pegue la consulta SQL con la esperanza de que funcione aquí como está. Lo que pasa aquí en Python es que es sensible a la sangría. una sangría incorrecta causaría un problema no deseado. Ahora, por otro lado, las consultas SQL y el código JavaScript, ambos no son sensibles a la sangría. Estos dependen de; (punto y coma) para romper la línea. Esto significa que incluso si especifica 300 comandos en una línea separando cada uno con un; (punto y coma) los comandos se ejecutarán sin problemas. Pero lo mismo no funcionará aquí en el caso de Python.

Si prueba el siguiente código, esto funcionará para usted y obtendrá los resultados esperados.

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

Intente imprimir y verificar la salida de esta variable en su Cliente SQL antes de usarla.