Ik heb een erg lange query. Ik zou die in Python in verschillende regels willen splitsen. Een manier om het in JavaScript te doen zou zijn om verschillende zinnen te gebruiken en ze samen te voegen met een +
operator (ik weet het, misschien is het niet de meest efficiënte manier om het te doen, maar ik'ben niet echt bezorgd over de prestaties in dit stadium, alleen de leesbaarheid van de code). Voorbeeld:
var long_string = 'some text not important. just garbage to' +
'illustrate my example';
Ik probeerde iets soortgelijks te doen in Python, maar het werkte niet, dus gebruikte ik `` om de lange string te splitsen. Ik weet echter niet zeker of dit de enige/beste/pythonischste manier is om het te doen. Het ziet er onhandig uit. Eigenlijke code:
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
Heb je het over multi-line strings? Makkelijk, gebruik driedubbele aanhalingstekens om ze te beginnen en te eindigen.
s = """ this is a very
long string if I had the
energy to type more and more ..."""
Je kunt ook enkele aanhalingstekens gebruiken (3 van hen natuurlijk aan het begin en einde) en de resulterende string s
net zo behandelen als elke andere string.
LET OP: Net als bij elke andere string, wordt alles tussen de begin- en eindaanhalingstekens onderdeel van de string, dus dit voorbeeld heeft een voorloopspatie (zoals @root45 al aangaf). Deze string zal ook zowel spaties als nieuwe regels bevatten.
D.w.z.:
' this is a very\n long string if I had the\n energy to type more and more ...'
Tenslotte kan men in Python ook lange lijnen construeren zoals dit:
s = ("this is a very"
"long string too"
"for sure ..."
)
die *geen extra spaties of nieuwe regels bevat (dit is een opzettelijk voorbeeld dat laat zien wat het effect is van het overslaan van spaties):
'this is a verylong string toofor sure ...'
Geen komma's nodig, plaats gewoon de samen te voegen strings in een paar haakjes en zorg ervoor dat er rekening wordt gehouden met eventuele spaties en nieuwe regels.
Als je geen meerregelige string wilt, maar gewoon een lange string van één regel, kun je haakjes gebruiken, zorg er alleen voor dat je geen komma's tussen de stringsegmenten zet, dan wordt het een 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)
In een SQL-instructie zoals jij die construeert, zouden multiline strings ook prima zijn. Maar als de extra witruimte die een multiline string zou bevatten een probleem zou zijn, dan zou dit een goede manier zijn om te bereiken wat je wilt.
Je eigenlijke code zou niet moeten werken, je mist spaties aan het einde van "lines" (bv: role.descr as roleFROM...
)
Er zijn driedubbele aanhalingstekens voor multiline string:
string = """line
line2
line3"""
Het zal de regeleinden en extra spaties bevatten, maar voor SQL is dat'geen probleem.