Turiu labai ilgą užklausą. Norėčiau ją suskaidyti į kelias eilutes Pythonu. Būdas tai padaryti JavaScript kalba būtų naudoti kelis sakinius ir sujungti juos operatoriumi +
(žinau, gal tai ne pats efektyviausias būdas, bet šiame etape man nelabai rūpi našumas, tik kodo skaitomumas). Pavyzdys:
var long_string = 'some text not important. just garbage to' +
'illustrate my example';
Bandžiau kažką panašaus daryti Python, bet tai nepadėjo, todėl ilgai eilutei padalyti panaudojau \
. Tačiau nesu įsitikinęs, ar tai vienintelis, geriausias ir tiksliausias būdas. Jis atrodo nepatogus.
Tikrasis kodas:
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
Ar kalbate apie kelių eilučių eilutes? Paprasta, pradėkite ir baigkite jas trigubomis kabutėmis.
s = """ this is a very
long string if I had the
energy to type more and more ..."""
Galite naudoti ir viengubas kabutes (žinoma, 3 kabutes pradžioje ir pabaigoje) ir gautą eilutę s
traktuoti kaip bet kurią kitą eilutę.
PAMINĖJIMAS: Kaip ir bet kurioje kitoje eilutėje, viskas, kas yra tarp pradžios ir pabaigos kabučių, tampa eilutės dalimi, todėl šiame pavyzdyje yra pradinė tuščia vieta (kaip nurodė @root45). Šioje eilutėje taip pat bus ir tuščių vietų, ir naujų eilučių.
T. y:
' this is a very\n long string if I had the\n energy to type more and more ...'
Galiausiai, ilgas eilutes Python kalba taip pat galima sudaryti taip:
s = ("this is a very"
"long string too"
"for sure ..."
)
į kurią nebus įtraukta jokių papildomų tuščių ir naujų eilučių (tai sąmoningas pavyzdys, rodantis, koks bus tuščių eilučių praleidimo poveikis):
'this is a verylong string toofor sure ...'
Kablelių rašyti nereikia, tiesiog sudėkite sujungiamas eilutes į porą skliaustų ir nepamirškite atsižvelgti į visus reikalingus tuščius tarpus ir naujas eilutes.
Jei nenorite kelių eilučių eilutės, o tik ilgą vienos eilutės eilutę, galite naudoti skliaustelius, tik įsitikinkite, kad tarp eilučių segmentų nėra kablelių, tada tai bus 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)
Tokioje SQL formuluotėje, kokią konstruojate, taip pat tinka ir kelių eilučių eilutės. Tačiau jei papildomos baltosios eilutės, kurias sudarytų daugiajuostė eilutė, būtų problema, tai būtų geras būdas pasiekti tai, ko norite.
Jūsų tikrasis kodas neturėtų veikti, jums trūksta baltųjų tarpų "eilučių" pabaigoje (pvz.: role.descr as roleFROM...
)
Daugiasluoksnėms eilutėms yra trigubos kabutės:
string = """line
line2
line3"""
Joje bus eilučių pertrūkiai ir papildomi tarpai, bet SQL tai nėra problema.