python একটি দীর্ঘ মাল্টি লাইন স্ট্রিং তৈরি করতে পাইথনিক উপায়





9 Answers

আপনি যদি মাল্টিলাইন স্ট্রিংটি না চান তবে শুধুমাত্র একটি লং একক লাইন স্ট্রিং থাকে তবে আপনি বন্ধনী ব্যবহার করতে পারেন, কেবল স্ট্রিং সেগমেন্টগুলির মধ্যে কমাগুলি অন্তর্ভুক্ত করবেন না তা নিশ্চিত করুন, এটি একটি টিপল হবে।

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)

এসকিউএল স্টেটমেন্টে আপনি যা তৈরি করছেন তার মতো, মাল্টিলাইন স্ট্রিংও ভাল হবে। তবে যদি অতিরিক্ত হোয়াইটস্পেসটি একটি মাল্টিলাইন স্ট্রিং ধারণ করে তবে এটি একটি সমস্যা হবে, তাহলে এটি আপনার পক্ষে যা অর্জন করতে হবে তা অর্জনের একটি ভাল উপায়।

python string multiline multilinestring

আমি একটি খুব দীর্ঘ প্রশ্ন আছে। আমি পাইথন বিভিন্ন লাইন এটি বিভক্ত করতে চাই। জাভাস্ক্রিপ্টে এটি করার একটি উপায় বেশ কয়েকটি বাক্য ব্যবহার করে এবং একটি + অপারেটরের সাথে তাদের যোগদান করবে (আমি জানি এটি হয়তো এটি করার সবচেয়ে কার্যকরী উপায় নয়, তবে আমি এই পর্যায়ে কর্মক্ষমতা সম্পর্কে সত্যিই উদ্বিগ্ন নই, শুধু কোড পাঠযোগ্যতা )। উদাহরণ:

var long_string = 'some text not important. just garbage to' +
                  'illustrate my example';

আমি Python তে অনুরূপ কিছু করার চেষ্টা করেছি, কিন্তু এটি কাজ করে নি, তাই আমি দীর্ঘ স্ট্রিংটি বিভক্ত করতে ব্যবহার করি। যাইহোক, আমি নিশ্চিত নই যে এটিই করার একমাত্র / সর্বোত্তম / পাইথনিক উপায়। এটা অদ্ভুত দেখায়। প্রকৃত কোড:

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



আমি এই এক সঙ্গে নিজেকে খুশি পাওয়া:

string = """This is a
very long string,
containing commas,
that I split up
for readability""".replace('\n',' ')



আপনি "" নোটেশন ব্যবহার করার সময় ভেরিয়েবল সংহত করতে পারেন:

foo = '1234'

long_string = """fosdl a sdlfklaskdf as
as df ajsdfj asdfa sld
a sdf alsdfl alsdfl """ +  foo + """ aks
asdkfkasdk fak"""

সম্পাদনা করুন: নামযুক্ত প্যারামিটার এবং .format () সহ আরও ভাল উপায় খুঁজে পেয়েছে:

body = """
<html>
<head>
</head>
<body>
    <p>Lorem ipsum.</p>
    <dl>
        <dt>Asdf:</dt>     <dd><a href="{link}">{name}</a></dd>
    </dl>
    </body>
</html>
""".format(
    link='http://www.asdf.com',
    name='Asdf',
)

print(body)



উদাহরণ স্বরূপ:

sql = ("select field1, field2, field3, field4 "
       "from table "
       "where condition1={} "
       "and condition2={}").format(1, 2)

Output: 'select field1, field2, field3, field4 from table 
         where condition1=1 and condition2=2'

যদি শর্ত মান একটি স্ট্রিং হওয়া উচিত, আপনি এটি করতে পারেন:

sql = ("select field1, field2, field3, field4 "
       "from table "
       "where condition1='{0}' "
       "and condition2='{1}'").format('2016-10-12', '2017-10-12')

Output: "select field1, field2, field3, field4 from table where
         condition1='2016-10-12' and condition2='2017-10-12'"



পাইথনে কাঁচা এসকিউএল ক্যোয়ারীগুলি লেখার জন্য আমি সর্বদাই সেরা (সহজ, নিরাপদ এবং পাইথনিক) উপায় খুঁজে পাচ্ছি, বিশেষত যখন পাইথনের sqlite3 মডিউল ব্যবহার করে:

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 = ?
        AND record_def.account_id = ?
        AND def_id = ?
'''
vars = (account_id, account_id, def_id)   # a tuple of query variables
cursor.execute(query, vars)   # using Python's sqlite3 module

পেশাদাররা

  • শুকনো এবং সহজ কোড (পাইথনিক!)
  • এসকিউএল ইনজেকশন থেকে নিরাপদ
  • পাইথন 2 এবং পাইথন 3 এর সাথে সামঞ্জস্যপূর্ণ (এটি সব পরে পাইথনিক)
  • কোন স্ট্রিং concatenation প্রয়োজন
  • প্রতিটি লাইন ডান-সবচেয়ে চরিত্র একটি স্থান নিশ্চিত করার প্রয়োজন নেই

কনস

  • যেহেতু ক্যোয়ারী পরিবর্তনশীল দ্বারা প্রতিস্থাপিত হয় ? স্থানধারক, এটি ট্র্যাক রাখা একটু কঠিন হতে পারে ? পাইথন পরিবর্তনশীল দ্বারা ক্যোয়ারী তাদের প্রচুর আছে যখন প্রতিস্থাপন করা হয়।



আপনার প্রকৃত কোডটি কাজ করবে না, আপনি "লাইন" শেষে (যেমন role.descr as roleFROM... ) এ সাদা জায়গা অনুপস্থিত

Multiline স্ট্রিং জন্য triplequotes আছে:

string = """line
  line2
  line3"""

এতে লাইন বিরতি এবং অতিরিক্ত স্পেস থাকবে, কিন্তু এসকিউএল এর জন্য এটি কোনও সমস্যা নয়।




আপনি SQL ফাইলটি একটি পৃথক ফাইল action.sql এও স্থাপন করতে পারেন এবং এটি py ফাইলে লোড করতে পারেন

with open('action.sql') as f:
   query = f.read()

তাই এসকিউএল-স্টেটমেন্ট পাইথন কোড থেকে পৃথক করা হবে। এসকিউএল স্টেটমেন্টের প্যারামিটারগুলি যদি পিয়থন থেকে পূরণ করা প্রয়োজন হয় তবে আপনি স্ট্রিং ফর্ম্যাটিং ব্যবহার করতে পারেন (যেমন% s বা {field})




জটিল জটিল এসকিউএল ক্যোয়ারী তৈরি করতে আমি একটি পুনরাবৃত্তিমূলক ফাংশন ব্যবহার করি। কোড পঠনযোগ্যতা বজায় রাখার সময় এই কৌশলটি সাধারণত বড় স্ট্রিংগুলি তৈরি করতে ব্যবহার করা যেতে পারে।

# Utility function to recursively resolve SQL statements.
# CAUTION: Use this function carefully, Pass correct SQL parameters {},
# TODO: This should never happen but check for infinite loops
def resolveSQL(sql_seed, sqlparams):
    sql = sql_seed % (sqlparams)
    if sql == sql_seed:
        return ' '.join([x.strip() for x in sql.split()])
    else:
        return resolveSQL(sql, sqlparams)

পিএস: যদি প্রয়োজন হয় চমত্কার মুদ্রণ এসকিউএল প্রশ্ন থেকে সন্ত্রস্ত python-sqlparse লাইব্রেরি একটি বর্ণন আছে। http://sqlparse.readthedocs.org/en/latest/api/#sqlparse.format




আমি এই পদ্ধতির পছন্দ কারণ এটি পড়ার অধিকার। যেখানে আমরা দীর্ঘ স্ট্রিং আছে সেখানে কোন উপায় নেই! ইন্ডেন্টেশন স্তরের উপর নির্ভর করে আপনি এখনও আছেন এবং এখনও প্রতি লাইনে 80 অক্ষর সীমাবদ্ধ ... ওয়েল ... অন্য কিছু বলার দরকার নেই। আমার দৃষ্টিতে পাইথন স্টাইল গাইড এখনও খুব অস্পষ্ট। আমি @Eero Altonen পদ্ধতিটি গ্রহণ করেছি কারণ এটি বিশেষভাবে পড়া এবং সাধারণ জ্ঞান। আমি শৈলী গাইড আমাদের সাহায্য করতে হবে এবং আমাদের জীবন একটি জগাখিচুড়ি করা উচিত বুঝতে। ধন্যবাদ!

class ClassName():
    def method_name():
        if condition_0:
            if condition_1:
                if condition_2:
                    some_variable_0 =\
"""
some_js_func_call(
    undefined, 
    {
        'some_attr_0': 'value_0', 
        'some_attr_1': 'value_1', 
        'some_attr_2': '""" + some_variable_1 + """'
    }, 
    undefined, 
    undefined, 
    true
)
"""





Related