Python MultilineStringはインデントを変更します
私は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コードを送信する必要がある別のテキストフィールドがあります)インデントを変更せずに、または少なくとも行の先頭からすべての行を開始することなくコード。誰かがあなたの入力を提供できますか?
コンパイラは、コードが以下の場合にのみコードをコンパイルします。
ありがとう、サンジェイ。
回答
この問題の解決策は非常に簡単です。ここでそのまま機能することを期待して、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クライアントでこの変数の出力を印刷して確認してみてください。