2015-09-23 10 views
6

के अनुसार लंबे एसक्यूएल प्रश्नों को प्रारूपित करने के लिए कैसे करें PEP 8 (Maximum Line Length) के अनुसार, एक पंक्ति 79 वर्णों से अधिक नहीं होनी चाहिए।पीईपी 8

जब मैं PEP8 के अनुसार प्रश्नों को विभाजित करने की कोशिश, फिर भी, मैं निरंतरता वर्ण की तरह अवैध टोकन समस्याएं आती हैं, और, आदि

उदाहरण के लिए, क्या सबसे अच्छा तरीका है कि इस प्रश्न के फ़ॉर्मेट करने के लिए हो सकता है,?

cursor.execute("SELECT pivot_id FROM aud_qty WHERE hshake1 is NULL AND ((strftime('%s', DATETIME('now')) - strftime('%s', sent_to_pivot))/(60)) > 30;") 
+0

मेरा मानना ​​है कि यह प्रश्न उदाहरण और अवधारणा के बारे में एक बेहतर स्पष्टीकरण के योग्य है। हो सकता है कि कुछ लंबे समय तक पाइथोनिस्ट दोनों परिस्थितियों के लिए एक और स्पष्ट दृष्टि दे सके। इस विषय के लिए और स्पष्टीकरण प्राप्त करने के लिए मैंने क्वारा में यह प्रश्न खोला: https://www.quora.com/unansredit/How-can-I-respect-PEP-8- अधिकतम-लाइन- लम्बाई-79-characters -for-SQL-query-without-cause-issues-to-my-code – ivanleoncz

उत्तर

7

क्या

cursor.execute("""SELECT pivot_id 
        FROM aud_qty 
        WHERE hshake1 is NULL 
        AND ((strftime('%s', DATETIME('now')) - 
         strftime('%s', sent_to_pivot))/(60)) > 30; 
       """) 

के बारे में? """ या ''' का उपयोग करके आप एक ही लंबे स्ट्रिंग के समान व्यवहार प्राप्त करते हैं लेकिन आप न्यूलाइन का उपयोग ठीक कर सकते हैं। और आपका डेटाबेस उन्हें या तो दिमाग में नहीं रखेगा।

2

आपको मल्टीलाइन स्ट्रिंग का उपयोग करने की आवश्यकता है। यदि आप अपनी स्ट्रिंग को केवल एक " या ' के साथ घोषित करते हैं, तो यह मल्टीलाइन स्ट्रिंग बनाने के लिए एक सिंगल लाइन स्ट्रिंग होगी, आपको अपनी स्ट्रिंग को """ या ''' से लपेटने की आवश्यकता है। यहाँ एक उदाहरण है:

sql_query = """SELECT pivot_id 
FROM aud_qty 
WHERE hshake1 is NULL AND 
    ((strftime('%s', DATETIME('now')) - strftime('%s', sent_to_pivot))/(60)) > 30;""" 

यह उल्लेख है कि SQL प्रश्नों बनाने मैन्युअल आमतौर पर नहीं एक अच्छा विचार है, के रूप में यह SQL इंजेक्शन हमले से सक्षम और अन्य समस्याओं को जन्म दे सकता लायक है।

0

कैसे मुक्केबाज़ी

from models import AudQty,session 
update_limit = time.time()-30*60 # 30 minutes ago 
session.query(AudQty.pivot_id).filter(hshake1=None, 
           sent_to_pivot_lte=update_limit).all() 

तार भी ट्रिपल कोट्स के बिना बहु, दो उद्धरण स्ट्रिंग के रूप में एक दूसरे के बगल स्वतः श्रेणीबद्ध

cursor.execute("SELECT pivot_id FROM aud_qty " 
       "WHERE hshake1 is NULL AND " 
       "((strftime('%s', DATETIME('now')) - strftime('%s', sent_to_pivot))/(60)) > 30;") 
+0

क्या यह SQL कीमिया आप उपयोग कर रहे हैं? – flybonzai

+1

हां पहला उदाहरण sqlalchemy है (मैं एक स्मार्ट गधे होने का प्रकार था) –

0

ट्रिपल कोट्स का उपयोग के रूप में द्वारा @Johanness जवाब उल्लेख किया जा सकता है , सबसे अच्छा समाधान है।

इसके अलावा, अपनी क्वेरी को एक अलग चर में अलग करने के लिए, यह भी एक अच्छा अभ्यास है: यह आपके कोड में अधिक स्पष्टता, पठनीयता और बेहतर उपस्थिति (डिज़ाइन) देता है।

इस उदाहरण की तरह:

#!/usr/bin/python3 
""" Demonstrating SQLite3 queries using triple quotes. """ 

import sqlite3 

name  = "Dennis Ritchie" 
country = "USA" 
email = "[email protected]" 

dbfile = "users_db.lite" 
db  = sqlite3.connect(dbfile) 
cursor = db.cursor() 
table = "users" 

def create_user(): 
    insert = """ INSERT INTO '{0}' (id,name,country,email,password) 
       VALUES (1,'{1}','{2}','{3}'); 
      """.format(table,name,country,email) 
    cursor.execute(insert) 
    db.commit() 
    return None 

create_user() 

यहाँ आगे पढ़ने के लिए GitHub पर एक मुद्दा है: SQL क्वेरी वी.एस. अधिकतम लाइन की लंबाई।

संबंधित मुद्दे