Çok uzun bir sorum var. Python'da bunu birkaç satıra bölmek istiyorum. Bunu JavaScript'te yapmanın bir yolu, birkaç cümle kullanmak ve bunları bir `+' operatörü ile birleştirmek olabilir (biliyorum, belki de bunu yapmanın en verimli yolu bu değil, ancak bu aşamada performans konusunda gerçekten endişelenmiyorum, sadece kod okunabilirliği). Örnek:
var long_string = 'some text not important. just garbage to' +
'illustrate my example';
Python'da benzer bir şey yapmayı denedim, ancak işe yaramadı, bu yüzden uzun dizeyi bölmek için \
kullandım. Bununla birlikte, bunu yapmanın tek / en iyi / en iyi yolunun bu olup olmadığından emin değilim. Garip görünüyor.
Gerçek kod:
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
Çok satırlı dizelerden mi bahsediyorsunuz? Kolay, onları başlatmak ve bitirmek için üçlü tırnak kullanın.
s = """ this is a very
long string if I had the
energy to type more and more ..."""
Tek tırnak da kullanabilirsiniz (tabii ki başında ve sonunda 3'er tane) ve ortaya çıkan s
dizesine diğer dizeler gibi davranabilirsiniz.
NOT: Herhangi bir dizede olduğu gibi, başlangıç ve bitiş tırnakları arasındaki her şey dizenin bir parçası haline gelir, bu nedenle bu örnekte önde gelen bir boşluk vardır (@root45 tarafından belirtildiği gibi). Bu dize ayrıca hem boşluklar hem de satırsonları içerecektir.
Yani:
' this is a very\n long string if I had the\n energy to type more and more ...'
Son olarak, Python'da bu şekilde uzun satırlar da oluşturulabilir:
s = ("this is a very"
"long string too"
"for sure ..."
)
fazladan boşluk veya satırbaşı içermeyecektir (bu, boşlukları atlamanın nasıl bir etki yaratacağını gösteren kasıtlı bir örnektir):
'this is a verylong string toofor sure ...'
Virgül gerekmez, birleştirilecek dizeleri bir çift parantez içine yerleştirin ve gerekli boşlukları ve yeni satırları hesaba kattığınızdan emin olun.
Çok satırlı bir dize istemiyorsanız, sadece uzun tek satırlı bir dizeniz varsa, parantez kullanabilirsiniz, sadece dize segmentleri arasına virgül eklemediğinizden emin olun, o zaman bir tuple olacaktır.
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)
Oluşturduğunuz gibi bir SQL deyiminde, çok satırlı dizeler de iyi olacaktır. Ancak, çok satırlı bir dizenin içereceği fazladan boşluk sorun olacaksa, bu, istediğinizi elde etmek için iyi bir yol olacaktır.
Gerçek kodunuz çalışmamalıdır, "satırların" sonunda boşlukları kaçırıyorsunuz (örneğin: role.descr as roleFROM...
)
Çok satırlı dize için üç tırnak işareti vardır:
string = """line
line2
line3"""
Satır sonları ve fazladan boşluklar içerecektir, ancak SQL için bu bir sorun değildir.