"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > क्या मुझे परिणाम पंक्तियों के बिना क्वेरीज़ के लिए `DB.exec()` या तैयार विवरण का उपयोग करना चाहिए?

क्या मुझे परिणाम पंक्तियों के बिना क्वेरीज़ के लिए `DB.exec()` या तैयार विवरण का उपयोग करना चाहिए?

2024-12-23 को प्रकाशित
ब्राउज़ करें:564

Should I Use `DB.exec()` or Prepared Statements in Go for Queries Without Result Rows?

गोलांग में *DB.exec() और तैयार कथनों का उपयोग करने की पहेली को समझना

परिचय

क्षेत्र में गो और पोस्टग्रेस्क्ल का उपयोग करके डेटाबेस हेरफेर के बारे में, यह सवाल उठता है: DB.exec() या से परेशान क्यों हों जब गो अपनी रचना को स्वचालित रूप से स्वचालित करता है तो तैयार किए गए कथन? यह आलेख उन परिचालनों को निष्पादित करने की जटिलताओं पर प्रकाश डालता है जो पंक्तियों को वापस नहीं करते हैं और तैयार कथनों का उपयोग करने के पीछे के तर्क को स्पष्ट करते हैं।

क्यों उपयोग करें DB.exec()?

हालांकि यह सच है कि DB.Query() और DB.exec() का उपयोग SQL कथनों को निष्पादित करने के लिए परस्पर उपयोग किया जा सकता है, वे लौटाए जाने वाले परिणाम के प्रकार में भिन्न होते हैं। DB.exec() क्वेरी से प्रभावित पंक्तियों की संख्या में अंतर्दृष्टि प्रदान करता है, जबकि DB.Query() एक परिणाम सेट लौटाता है।

उदाहरण के लिए, मान लीजिए आप एक DELETE कथन निष्पादित करना चाहते हैं और हटाई गई पंक्तियों की संख्या सुनिश्चित करना चाहते हैं। DB.exec() का उपयोग करना पसंदीदा तरीका है:

res, err := db.Exec(`DELETE FROM my_table WHERE expires_at = $1`, time.Now())
if err != nil {
    panic(err)
}

numDeleted, err := res.RowsAffected()
if err != nil {
    panic(err)
}
print(numDeleted)

वैकल्पिक रूप से, अधिक बोझिल दृष्टिकोण में DB.Query() का उपयोग करना और उन्हें गिनने के लिए पंक्तियों के माध्यम से लूप करना शामिल होगा:

rows, err := db.Query(`DELETE FROM my_table WHERE expires_at = $1 RETURNING *`, time.Now())
if err != nil {
    panic(err)
}
defer rows.Close()

var numDeleted int
for rows.Next() {
    numDeleted  = 1
}
if err := rows.Err(); err != nil {
    panic(err)
}
print(numDeleted)

इसके अलावा, जब किसी क्वेरी का परिणाम अप्रासंगिक होता है और आपको केवल इसे निष्पादित करने की आवश्यकता होती है, तो DB.exec() एक संक्षिप्त समाधान प्रदान करता है:

if _, err := db.Exec(``); err != nil {
    panic(err)
}

इसके विपरीत, DB.Query() का उपयोग करते समय लौटाए गए DB.Rows मान के लिए क्लोज कॉल को छोड़ने से अंततः खुले कनेक्शनों का अधिभार हो जाएगा। मेमोरी लीक के कारण।

तैयार वक्तव्यों में गहराई से जाना

हालांकि यह सुझाव दिया गया है कि गो स्वचालित रूप से तैयार कथन बनाता है, वास्तविकता अधिक सूक्ष्म प्रतीत होती है। DB.Query() का व्यवहार उपयोग किए जा रहे अंतर्निहित ड्राइवर पर निर्भर करता प्रतीत होता है। प्रश्न. आधिकारिक Postgresql दस्तावेज़ में एक झलक से पता चलता है कि कैसे तैयार किए गए कथन संचालन को अनुकूलित कर सकते हैं।

निष्कर्ष

DB.exec() और के बीच अंतर को समझना गोलांग में तैयार किए गए स्टेटमेंट डेवलपर्स को उन ऑपरेशनों को निष्पादित करने में मदद करते हैं जो पंक्तियों को कुशलता से वापस नहीं करते हैं और प्रदर्शन अनुकूलन की मांग करते समय तैयार स्टेटमेंट के लाभों का लाभ उठाते हैं।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3