Eu tenho uma pergunta muito longa. Eu gostaria de dividi-la em várias linhas em Python. Uma forma de fazê-lo em JavaScript seria utilizando várias frases e juntando-as com um operador +
(eu sei, talvez ele'não é a forma mais eficiente de fazê-lo, mas I'não estou realmente preocupado com a performance nesta fase, apenas com a legibilidade do código). Exemplo:
var long_string = 'some text not important. just garbage to' +
'illustrate my example';
Eu tentei fazer algo similar em Python, mas não funcionou'não funcionou, então eu usei ``` para dividir o fio longo. Entretanto, I'não tenho certeza se esta é a única/melhor/pithônica maneira de fazer isso. Parece estranho. Código real:
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
Estás a falar de cordas multi-linhas? Fácil, use aspas triplas para começar e acabar com elas.
s = """ this is a very
long string if I had the
energy to type more and more ..."""
Você pode utilizar citações simples também (3 delas, claro, no início e no fim) e tratar a string resultante `s' como qualquer outra string.
**NOTE***: Tal como com qualquer string, qualquer coisa entre as aspas inicial e final torna-se parte da string, por isso este exemplo tem um espaço em branco (como apontado por @root45). Esta string também conterá tanto espaços em branco como novas linhas.
Isto é,..:
' this is a very\n long string if I had the\n energy to type more and more ...'
Finalmente, também se pode construir longas linhas em Python como esta:
s = ("this is a very"
"long string too"
"for sure ..."
)
que não incluirá quaisquer espaços em branco extras ou novas linhas (este é um exemplo deliberado mostrando em que resultará o efeito de saltar espaços em branco):
'this is a verylong string toofor sure ...'
Não são necessárias vírgulas, basta colocar as cordas a serem unidas num par de parênteses e não se esqueça de ter em conta os espaços em branco e as novas linhas necessárias.
Se você não quer uma corda com várias linhas, mas só tem uma longa corda de uma linha, você pode usar parênteses, apenas certifique-se de não incluir vírgulas entre os segmentos da corda, então será um tuple.
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)
Em uma instrução SQL como a que você está construindo, cordas de várias linhas também seriam boas. Mas se o espaço em branco extra que uma cadeia de caracteres multilinha contém seria um problema, então esta seria uma boa maneira de conseguir o que você quer.
Seu código real não deve funcionar, você está faltando espaços em branco no final das "linhas" (por exemplo: role.descr como roleFROM...
)
Há três aspas para cordas com várias linhas:
string = """line
line2
line3"""
Ele irá conter as quebras de linha e espaços extras, mas para SQL isso não é um problema.