Многострочная строка Python изменяет отступ
Я работаю над автоматизацией с помощью 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 ), не изменяя отступы или, по крайней мере, начиная все строки с начала строки . Кто-нибудь может поделиться своими впечатлениями?
Компилятор компилирует коды только в том случае, если код приведен ниже.
Спасибо, Санджай.
Ответы
Решение этой проблемы очень простое. Вы просто копируете вставленный 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-клиенте, прежде чем использовать ее.