Python Multiline String modifie l'indentation
Je travaille sur une automatisation avec Python et Selenium. Je dois coller un bloc de codes SQL et Java Script dans la zone de texte du site Web. J'ai utilisé de nombreuses façons d'envoyer les chaînes, mais cela change l'indentation. Existe-t-il un moyen d'envoyer les codes / chaînes sans aucune modification de l'indentation? J'ai utilisé tout ce qui suit et rien n'a fonctionné,
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""")
Production:
Le est la sortie
Pour cette raison, le compilateur ne compile pas le code et ne donne pas d'erreur.
Je dois envoyer ces codes SQL et Java Script ( j'ai un autre champ de texte dans lequel je dois envoyer des codes JS qui ont des boucles For et des conditions IF ) Codes sans modifier l'indentation ou au moins commencer toutes les lignes à partir du début de la ligne . Quelqu'un peut-il s'il vous plaît fournir vos commentaires?
Le compilateur compile les codes uniquement si le code est comme ci-dessous.
Merci, Sanjay.
Réponses
La solution à ce problème est très simple. Vous venez de copier-coller la requête SQL en espérant qu'elle fonctionnera ici telle quelle. Le truc ici en Python est qu'il est sensible à l'indentation. un mauvais retrait causerait un problème involontaire. Maintenant, d'un autre côté, les requêtes SQL et le code JavaScript, les deux ne sont pas sensibles au retrait. Ceux-ci dépendent de; (point-virgule) pour couper la ligne. Cela signifie que même si vous spécifiez 300 commandes sur une ligne en séparant chacune d'elles par un; (point-virgule) les commandes s'exécuteront sans tracas. Mais la même chose ne fonctionnera pas ici dans le cas de python.
Si vous essayez le code ci-dessous, cela fonctionnera pour vous et vous obtiendrez les résultats attendus.
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")
Essayez d'imprimer et de vérifier la sortie de cette variable dans votre client SQL avant de l'utiliser.