Man ir ļoti garš jautājums. Es gribētu to sadalīt vairākās rindās Python. Veids, kā to izdarīt JavaScript, būtu izmantot vairākus teikumus un apvienot tos ar +
operatoru (es zinu, varbūt tas nav efektīvākais veids, kā to izdarīt, bet šajā posmā mani neuztrauc veiktspēja, tikai koda lasāmība). Piemērs:
var long_string = 'some text not important. just garbage to' +
'illustrate my example';
Es mēģināju kaut ko līdzīgu izdarīt Python, bet tas nedarbojās, tāpēc es izmantoju \
, lai sadalītu garo virkni. Tomēr es neesmu pārliecināts, vai tas ir vienīgais, labākais un pareizākais veids, kā to izdarīt. Tas izskatās neveikli.
Faktiskais kods:
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
Vai jūs runājat par vairāku rindu virknēm? Viegli, izmantojiet trīskāršas pēdiņas, lai tās sāktu un beigtu.
s = """ this is a very
long string if I had the
energy to type more and more ..."""
Varat izmantot arī vienkāršas pēdiņas (protams, 3 no tām sākumā un beigās) un iegūtās virknes s
apstrādāt tāpat kā jebkuru citu virkni.
PIEZĪME: Tāpat kā jebkura cita virkne, viss, kas atrodas starp sākuma un beigu pēdiņām, kļūst par virknes daļu, tāpēc šajā piemērā ir sākumdaļa (kā norādīja @root45). Šajā rindā būs arī tukšās un jaunās rindas.
T.i.,:
' this is a very\n long string if I had the\n energy to type more and more ...'
Visbeidzot, garas rindas Python valodā var veidot arī šādi:
s = ("this is a very"
"long string too"
"for sure ..."
)
kas neiekļaus papildu tukšās vai jaunās rindiņas (šis ir apzināts piemērs, kas parāda, kāda būs tukšo rindu izlaišanas ietekme):
'this is a verylong string toofor sure ...'
Kārtas nav nepieciešamas, vienkārši ievietojiet savienojamās virknes iekavās un pārliecinieties, ka ir ņemtas vērā visas nepieciešamās tukšās un jaunās rindkopas.
Ja nevēlaties daudzrindu virkni, bet tikai garu vienas rindas virkni, varat izmantot iekavās, tikai pārliecinieties, ka starp virknes segmentiem nav komatu, tad tā būs 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)
SQL izteikumā, piemēram, jūsu veidotajā izteikumā, arī daudzrindu virknes būtu piemērotas. Bet, ja papildu baltās atstarpes, ko satur daudzrindu virkne, radītu problēmas, tad šis būtu labs veids, kā panākt vēlamo.
Jūsu faktiskajam kodam nevajadzētu darboties, jums trūkst balto atstarpju "līniju" beigās (piemēram: role.descr kā roleFROM...
).
Daudzrindu virknei ir trīskārtējas pēdiņas:
string = """line
line2
line3"""
Tajā būs rindas pārrāvumi un papildu atstarpes, bet SQL tas'nav problēma.