Python MultilineStringはインデントを変更します

Sep 14 2020

私はPythonとSeleniumを使用した自動化に取り組んでいます。Webサイトのテキスト領域内にSQLおよびJavaスクリプトコードのブロックを貼り付ける必要があります。文字列を送信するために多くの方法を使用しましたが、インデントが変更されます。インデントを変更せずにコード/文字列を送信する方法はありますか?以下をすべて使用しましたが、何も機能しませんでした。

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スクリプトを送信する必要があります(ForループとIF条件を持つJSコードを送信する必要がある別のテキストフィールドがあります)インデントを変更せずに、または少なくとも行の先頭からすべての行を開始することなくコード。誰かがあなたの入力を提供できますか?

コンパイラは、コードが以下の場合にのみコードをコンパイルします。

ありがとう、サンジェイ。

回答

JaspreetKaur Sep 24 2020 at 06:45

この問題の解決策は非常に簡単です。ここでそのまま機能することを期待して、SQLクエリをコピーして貼り付けただけです。ここPythonで重要なのは、インデントに敏感であるということです。インデントを間違えると、意図しない問題が発生します。一方、SQLクエリとJavaScriptコードでは、どちらもインデントに依存しません。これらはに依存します; (セミコロン)ラインを壊します。これは、1行に300個のコマンドを指定した場合でも、各コマンドを;で区切ることを意味します。(セミコロン)コマンドは手間をかけずに実行されます。しかし、Pythonの場合、同じことはここでは機能しません。

以下のコードを試してみると、これでうまくいき、期待どおりの結果が得られます。

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クライアントでこの変数の出力を印刷して確認してみてください。