Jeg har en veldig lang spørring. Jeg vil gjerne dele den opp i flere linjer i Python. En måte å gjøre det på i JavaScript ville være å bruke flere setninger og slå dem sammen med en +
-operatør (jeg vet, kanskje det ikke er den mest effektive måten å gjøre det på, men jeg er ikke så opptatt av ytelse på dette stadiet, bare kode lesbarhet). Eksempel:
var long_string = 'some text not important. just garbage to' +
'illustrate my example';
Jeg prøvde å gjøre noe lignende i Python, men det fungerte ikke, så jeg brukte \
for å splitte den lange strengen. Jeg er imidlertid ikke sikker på om dette er den eneste/beste/tydeligste måten å gjøre det på. Det ser vanskelig ut.
Faktisk kode:
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
Snakker du om strenger på flere linjer? Enkelt, bruk tre anførselstegn til å starte og avslutte dem.
s = """ this is a very
long string if I had the
energy to type more and more ..."""
Du kan også bruke enkle anførselstegn (selvfølgelig tre ved start og slutt) og behandle den resulterende strengen s
akkurat som en hvilken som helst annen streng.
MERKNAD: Akkurat som med en hvilken som helst streng, blir alt mellom anførselstegnene i starten og slutten en del av strengen, så dette eksemplet har et ledende blanktegn (som påpekt av @root45). Denne strengen vil også inneholde både blanktegn og nye linjer.
Dvs:
' this is a very\n long string if I had the\n energy to type more and more ...'
Til slutt kan man også konstruere lange linjer i Python på denne måten:
s = ("this is a very"
"long string too"
"for sure ..."
)
som ikke inkluderer noen ekstra blanktegn eller ny linje (dette er et bevisst eksempel som viser effekten av å hoppe over blanktegn):
'this is a verylong string toofor sure ...'
Det er ikke nødvendig med kommaer, bare plasser strengene som skal slås sammen i et par parenteser og sørg for å ta hensyn til eventuelle blanktegn og nye linjer.
Hvis du ikke vil ha en flerlinjestreng, men bare en lang enlinjestreng, kan du bruke parenteser, men pass på at du ikke setter komma mellom strengsegmentene, da blir det en tupel.
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)
I en SQL-setning som den du konstruerer, går det også bra med flerlinjede strenger. Men hvis de ekstra mellomrommene i en flerlinjestreng er et problem, er dette en god måte å oppnå det du ønsker.
Den faktiske koden din skal ikke fungere, du mangler mellomrom på slutten av "linjer" (f.eks: role.descr as roleFROM...
)
Det er tredobbelte anførselstegn for flerlinjede strenger:
string = """line
line2
line3"""
Den vil inneholde linjeskift og ekstra mellomrom, men for SQL er ikke det noe problem.