非常に長いクエリがあります。それをPythonで数行に分割したいと思っています。JavaScriptでそれを行う方法は、いくつかの文を使い、それらを +
演算子で結合することです(最も効率的な方法ではないかもしれませんが、この段階ではパフォーマンスはあまり気にせず、コードの読みやすさだけを考えています)。例
var long_string = 'some text not important. just garbage to' +
'illustrate my example';
似たようなことをPythonでやってみたのですが、うまくいかなかったので、長い文字列を分割するために``を使いました。しかし、これが唯一/最善/最良の方法なのかどうかはわかりません。見た目が不格好ですからね。 実際のコードです。
query = 'SELECT action.descr as "action", '\
'role.id as role_id,'\
'role.descr as role'\
'FROM '\
'public.role_action_def,'\
'public.role,'\
'public.record_def, '\
'public.action'\
'WHERE role.id = role_action_def.role_id AND'\
'record_def.id = role_action_def.def_id AND'\
'action.id = role_action_def.action_id AND'\
'role_action_def.account_id = ' + account_id + ' AND'\
'record_def.account_id=' + account_id + ' AND'\
'def_id=' + def_id
複数行の文字列のことでしょうか?簡単です。トリプルクォートで開始と終了を指定します。
s = """ this is a very
long string if I had the
energy to type more and more ..."""
シングルクォートも使うことができます (もちろん最初と最後に3つずつ)。その結果得られる文字列 s
は他の文字列と同様に扱うことができます。
注意。他の文字列と同じように、開始と終了の引用符の間にあるものは文字列の一部になりますので、この例では先頭に空白があります(@root45さんの指摘による)。この文字列には、空白と改行の両方が含まれます。
つまり、以下のようになります。
' this is a very\n long string if I had the\n energy to type more and more ...'
最後に、Pythonでは次のように長い行を作ることもできます。
s = ("this is a very"
"long string too"
"for sure ..."
)
これは余分なブランクや改行を 含まない (これはブランクをスキップすることでどのような効果が得られるかを示す意図的な例です)。
'this is a verylong string toofor sure ...'
カンマは必要ありません。単純に結合する文字列を2つの括弧に入れ、必要なブランクや改行を必ず考慮してください。
複数行の文字列ではなく、1行の長い文字列が必要な場合は、括弧を使用することができます。ただし、文字列セグメントの間にカンマを入れないようにすると、タプルになります。
query = ('SELECT action.descr as "action", '
'role.id as role_id,'
'role.descr as role'
' FROM '
'public.role_action_def,'
'public.role,'
'public.record_def, '
'public.action'
' WHERE role.id = role_action_def.role_id AND'
' record_def.id = role_action_def.def_id AND'
' action.id = role_action_def.action_id AND'
' role_action_def.account_id = '+account_id+' AND'
' record_def.account_id='+account_id+' AND'
' def_id='+def_id)
あなたが作成しているようなSQL文では、複数行の文字列でも問題ありません。 しかし、複数行の文字列に含まれる余分なホワイトスペースが問題となる場合は、この方法で目的を達成することができます。