Многострочная строка Python изменяет отступ

Sep 14 2020

Я работаю над автоматизацией с помощью Python и Selenium. Мне нужно вставить блок кодов SQL и Java Script в текстовую область на веб-сайте. Я использовал много способов отправки строк, но это меняет отступ. Есть ли способ отправить коды / строки без изменения отступа? Я использовал все нижеприведенное, и ничего не получилось

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

Код:

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

Вывод:

Это выход

Из-за этого компилятор не компилирует код и не выдает ошибку.

Мне нужно отправить эти SQL и Java Script (у меня есть еще одно текстовое поле, куда я должен отправить JS-коды, которые имеют условия для циклов и IF ), не изменяя отступы или, по крайней мере, начиная все строки с начала строки . Кто-нибудь может поделиться своими впечатлениями?

Компилятор компилирует коды только в том случае, если код приведен ниже.

Спасибо, Санджай.

Ответы

JaspreetKaur Sep 24 2020 at 06:45

Решение этой проблемы очень простое. Вы просто копируете вставленный SQL-запрос в надежде, что он будет работать и здесь, как есть. Дело в том, что Python чувствителен к отступу. неправильный отступ может вызвать непредвиденные проблемы. Теперь, с другой стороны, SQL-запросы и JavaScript-код не чувствительны к отступу. Они зависят от: (точка с запятой), чтобы разорвать строку. Это означает, что даже если вы укажете 300 команд в одной строке, разделяя каждую из них символом; (точка с запятой) команды будут выполняться без проблем. Но в случае с питоном то же самое здесь не сработает.

Если вы попробуете приведенный ниже код, это сработает для вас, и вы получите ожидаемые результаты.

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

Попробуйте распечатать и проверить вывод этой переменной в вашем SQL-клиенте, прежде чем использовать ее.