SQLx: मजबूत टाइपिंग सपोर्ट के साथ रस्ट SQL टूलकिट

समस्याओं को खत्म करने के लिए हमारे साधन का प्रयास करें

SQLx: मजबूत टाइपिंग सपोर्ट के साथ रस्ट SQL टूलकिट

SQLx एक async, शुद्ध Rust† SQL क्रेट है जिसमें DSL के बिना संकलन-समय पर जाँच की गई क्वेरीज़ हैं।

    वास्तव में अतुल्यकालिक. अधिकतम समवर्ती के लिए async/प्रतीक्षा का उपयोग करके ग्राउंड-अप से निर्मित।संकलन-समय की जाँच की गई क्वेरी(अगर तुम चाहते हो)। देखना एसक्यूएलएक्स एक ओआरएम नहीं है .डेटाबेस अज्ञेयवादी. PostgreSQL, MySQL, SQLite, और MSSQL के लिए समर्थन।शुद्ध जंग. Postgres और MySQL/MariaDB ड्राइवर शुद्ध रस्ट में लिखे गए हैं शून्य असुरक्षित †† कोड।रनटाइम अज्ञेयवादी. अलग-अलग रनटाइम पर काम करता है ( |_+_| / |_+_| / |_+_| ) और टीएलएस बैकएंड ( |_+_| , |_+_| ) पर काम करता है।

† SQLite ड्राइवर libsqlite3 C लाइब्रेरी का उपयोग करता है क्योंकि SQLite एक एम्बेडेड डेटाबेस है (SQLite के लिए शुद्ध रस्ट होने का एकमात्र तरीका पोर्टिंग है सब SQLite से जंग तक)।

†† SQLx |_+_| का उपयोग करता है जब तक कि |_+_| सुविधा सक्षम है। जैसा कि SQLite ड्राइवर C के साथ इंटरैक्ट करता है, वे इंटरैक्शन हैं |_+_|।



360 इमेज व्यूअर जेएस
  • क्रॉस-प्लेटफ़ॉर्म। देशी रस्ट होने के नाते, SQLx कहीं भी संकलित करेगा जहाँ रस्ट समर्थित है।
  • |_+_| के साथ बिल्ट-इन कनेक्शन पूलिंग।
  • पंक्ति स्ट्रीमिंग। डेटा को डेटाबेस से अतुल्यकालिक रूप से पढ़ा जाता है और ऑन-डिमांड डिकोड किया जाता है।
  • स्वचालित बयान तैयार करना और कैशिंग। उच्च-स्तरीय क्वेरी API (|_+_|) का उपयोग करते समय, कथन तैयार किए जाते हैं और प्रति-कनेक्शन कैश किया जाता है।
  • सरल (तैयार नहीं) क्वेरी निष्पादन जिसमें उसी में परिणाम लाना शामिल है |_+_| उच्च स्तरीय एपीआई द्वारा उपयोग किए जाने वाले प्रकार। बैच निष्पादन और सभी कथनों से परिणाम लौटाने का समर्थन करता है।
  • ट्रांसपोर्ट लेयर सिक्योरिटी (TLS) जहां समर्थित (MySQL और PostgreSQL)।
  • |_+_| का उपयोग करते हुए अतुल्यकालिक सूचनाएं और |_+_| पोस्टग्रेएसक्यूएल के लिए।
  • बचत बिंदुओं के समर्थन के साथ नेस्टेड लेनदेन।
  • |_+_| डेटाबेस ड्राइवर रनटाइम पर डेटाबेस ड्राइवर बदलने के लिए। एक |_+_| यूआरआई योजना द्वारा इंगित चालक से जुड़ता है।

स्थापित करना

SQLx |_+_| के साथ संगत है , |_+_| और |_+_| रनटाइम; और, |_+_| और |_+_| टीएलएस बैकएंड। निर्भरता जोड़ते समय, आपको एक रनटाइम सुविधा चुननी होगी जो कि |_+_| है + |_+_|.

|_+_|

रनटाइम और टीएलएस बैकएंड का चयन करने के लिए अलग-अलग फीचर सेट नहीं होना एक कार्गो समस्या का समाधान है।

कार्गो फ़ीचर फ़्लैग

  • |_+_|: |_+_| का प्रयोग करें रनटाइम और |_+_| टीएलएस बैकएंड।
  • |_+_|: |_+_| का प्रयोग करें रनटाइम और |_+_| टीएलएस बैकएंड।
  • |_+_|: |_+_| का प्रयोग करें रनटाइम और |_+_| टीएलएस बैकएंड।
  • |_+_|: |_+_| का प्रयोग करें रनटाइम और |_+_| टीएलएस बैकएंड।
  • |_+_|: |_+_| का प्रयोग करें रनटाइम और |_+_| टीएलएस बैकएंड।
  • |_+_|: |_+_| का प्रयोग करें रनटाइम और |_+_| टीएलएस बैकएंड।
  • |_+_|: पोस्टग्रेज डेटाबेस सर्वर के लिए समर्थन जोड़ें।
  • |_+_|: MySQL/MariaDB डेटाबेस सर्वर के लिए समर्थन जोड़ें।
  • |_+_|: MSSQL डेटाबेस सर्वर के लिए समर्थन जोड़ें।
  • |_+_|: स्व-निहित SQLite डेटाबेस इंजन के लिए समर्थन जोड़ें।
  • |_+_|: |_+_| के लिए समर्थन जोड़ें डेटाबेस ड्राइवर, जो रनटाइम पर डेटाबेस ड्राइवर को प्रॉक्सी कर सकता है।
  • |_+_|: |_+_| के लिए समर्थन जोड़ें मैक्रोज़, जो संकलन-समय पर चेक किए गए प्रश्नों की अनुमति देते हैं।
  • |_+_|: माइग्रेशन प्रबंधन और |_+_| के लिए समर्थन जोड़ें मैक्रो, जो संकलन-समय एम्बेडेड माइग्रेशन की अनुमति देता है।
  • |_+_|: यूयूआईडी के लिए समर्थन जोड़ें (पोस्टग्रेज़ में)।
  • |_+_|: दिनांक और समय प्रकारों के लिए |_+_| से समर्थन जोड़ें।
  • |_+_|: दिनांक और समय प्रकारों के लिए |_+_| से समर्थन जोड़ें टोकरा (|_+_| का विकल्प, जिसे |_+_| मैक्रो द्वारा पसंद किया जाता है, यदि दोनों सक्षम हैं)
  • |_+_|: |_+_| के लिए समर्थन जोड़ें।
  • |_+_|: |_+_| के लिए समर्थन जोड़ें।
  • |_+_|: |_+_| के लिए समर्थन जोड़ें |_+_| का उपयोग करना टोकरा।
  • |_+_|: |_+_| के लिए समर्थन जोड़ें |_+_| का उपयोग करना टोकरा।
  • |_+_|: |_+_| के लिए समर्थन जोड़ें और |_+_| (पोस्टग्रेज में) |_+_| का उपयोग करके टोकरा।
  • |_+_|: |_+_| के लिए समर्थन जोड़ें और |_+_| (पोस्टग्रेज में) |_+_| का उपयोग करके टोकरा।
  • |_+_|: टीएलएस कनेक्शन के लिए समर्थन जोड़ें।
  • |_+_|: लाइव डेटाबेस (जैसे सीआई) उपलब्ध नहीं होने पर मैक्रोज़ को ऑफ़लाइन मोड में बनाने में सक्षम बनाता है।
    • |_+_| की आवश्यकता है उपयोग करने के लिए स्थापित। देखना sqlx-cli/README.md .

SQLx एक ORM नहीं है!

एसक्यूएलएक्स समर्थन करता है संकलन-समय की जाँच की गई क्वेरी . हालाँकि, यह प्रश्नों के निर्माण के लिए रस्ट एपीआई या डीएसएल (डोमेन-विशिष्ट भाषा) प्रदान करके ऐसा नहीं करता है। इसके बजाय, यह मैक्रोज़ प्रदान करता है जो इनपुट के रूप में नियमित SQL लेते हैं और सुनिश्चित करते हैं कि यह आपके डेटाबेस के लिए मान्य है। जिस तरह से यह काम करता है वह यह है कि SQLx संकलन समय पर आपके विकास DB से जुड़ता है ताकि डेटाबेस स्वयं आपके SQL प्रश्नों को सत्यापित (और कुछ जानकारी वापस कर सके)। इसके कुछ संभावित आश्चर्यजनक प्रभाव हैं:

  • चूँकि SQLx को कभी भी SQL स्ट्रिंग को स्वयं पार्स नहीं करना पड़ता है, विकास DB द्वारा स्वीकार किए जाने वाले किसी भी सिंटैक्स का उपयोग किया जा सकता है (डेटाबेस एक्सटेंशन द्वारा जोड़ी गई चीजों सहित)
  • सूचना डेटाबेस की विभिन्न मात्रा के कारण आप प्रश्नों के बारे में पुनः प्राप्त कर सकते हैं, क्वेरी मैक्रोज़ से प्राप्त SQL सत्यापन की सीमा डेटाबेस पर निर्भर करती है

यदि आप एक (अतुल्यकालिक) ORM की तलाश कर रहे हैं, आप चेक आउट कर सकते हैं |_+_| या |_+_| , जो SQLx के ऊपर बनाया गया है।

प्रयोग

|_+_| देखें अधिक गहन उपयोग के लिए फ़ोल्डर।

जल्दी शुरू

|_+_||_+_|

कनेक्ट

किसी भी डेटाबेस कनेक्शन प्रकार और कॉलिंग |_+_| का उपयोग करके एक एकल कनेक्शन स्थापित किया जा सकता है।

|_+_|

आमतौर पर, आप इसके बजाय एक कनेक्शन पूल (|_+_|) बनाना चाहेंगे ताकि आपका एप्लिकेशन यह नियंत्रित कर सके कि वह कितने सर्वर-साइड कनेक्शन का उपयोग कर रहा है।

|_+_|

क्वेरी

SQL में, प्रश्नों को तैयार (पैरामीटरीकृत) या अप्रस्तुत (सरल) में विभाजित किया जा सकता है। तैयार प्रश्नों की अपनी क्वेरी योजना है कैश की गई , संचार के बाइनरी मोड (कम बैंडविड्थ और तेज़ डिकोडिंग) का उपयोग करें, और SQL इंजेक्शन से बचने के लिए पैरामीटर का उपयोग करें। तैयार न किए गए प्रश्न सरल होते हैं और केवल उपयोग के मामले के लिए लक्षित होते हैं जहां एक तैयार कथन काम नहीं करेगा, जैसे कि विभिन्न डेटाबेस कमांड (जैसे, |_+_| या |_+_| या |_+_|)।

SQLx दोनों प्रकार के प्रश्नों के साथ सभी कार्यों का समर्थन करता है। SQLx में, a |_+_| एक तैयार न की गई क्वेरी और एक |_+_| के रूप में माना जाता है या |_+_| संरचना को एक तैयार क्वेरी के रूप में माना जाता है।

|_+_|

हमें उच्च स्तर, |_+_| का उपयोग करना पसंद करना चाहिए इंटरफ़ेस जब भी संभव हो। इसे आसान बनाने के लिए, निष्पादक के साथ लपेटने की आवश्यकता से बचने के लिए प्रकार पर अंतिम रूप देने वाले होते हैं।

|_+_|

|_+_| क्वेरी फ़ाइनलाइज़र प्रभावित पंक्तियों की संख्या लौटाता है, यदि कोई हो, और सभी प्राप्त परिणामों को छोड़ देता है। इसके अलावा, |_+_|, |_+_|, |_+_|, और |_+_| परिणाम प्राप्त करने के लिए।

|_+_| प्रकार |_+_| से लौटाया गया वापस आ जाएगा |_+_| डेटाबेस से। कॉलम मानों को क्रमसूचक या नाम से |_+_| के साथ एक्सेस किया जा सकता है। |_+_| के रूप में कनेक्शन पर एक अपरिवर्तनीय उधार रखता है, केवल एक |_+_| एक समय में मौजूद हो सकता है।

|_+_| क्वेरी फ़ाइनलाइज़र एक स्ट्रीम-जैसा प्रकार देता है जो परिणाम सेट में पंक्तियों के माध्यम से पुनरावृत्त करता है।

|_+_|

पंक्ति को एक डोमेन प्रकार में मैप करने में सहायता के लिए, दो मुहावरे हैं जिनका उपयोग किया जा सकता है:

|_+_||_+_|

परिणामों की धारा के बजाय, हम |_+_| का उपयोग कर सकते हैं या |_+_| डेटाबेस से एक आवश्यक या वैकल्पिक परिणाम का अनुरोध करने के लिए।

संकलन-समय सत्यापन

हम मैक्रो का उपयोग कर सकते हैं, |_+_| SQL का संकलन-समय सिंटैक्टिक और सिमेंटिक सत्यापन प्राप्त करने के लिए, एक अज्ञात रिकॉर्ड प्रकार के आउटपुट के साथ जहां प्रत्येक SQL कॉलम एक रस्ट फ़ील्ड है (जहाँ आवश्यक कच्चे पहचानकर्ताओं का उपयोग करके)।

|_+_|

|_+_| से अंतर:

  • इनपुट (या बाइंड) पैरामीटर एक बार में दिए जाने चाहिए (और वे सही संख्या और सही प्रकार होने के लिए संकलित-समय मान्य हैं)।
  • आउटपुट प्रकार एक अनाम रिकॉर्ड है। उपरोक्त उदाहरण में प्रकार समान होगा:
|_+_|
  • |_+_| पर्यावरण परिवर्तक को डेटाबेस के निर्माण के समय सेट किया जाना चाहिए जिसके विरुद्ध वह प्रश्न तैयार कर सकता है; डेटाबेस में कोई डेटा नहीं होना चाहिए, लेकिन एक ही तरह का होना चाहिए (MySQL, Postgres, आदि) और डेटाबेस के समान ही स्कीमा होना चाहिए, जिसे आप रनटाइम पर कनेक्ट कर रहे होंगे।

सुविधा के लिए, आप |_+_| का उपयोग कर सकते हैं DATABASE_URL सेट करने के लिए फ़ाइल ताकि आपको इसे हर बार पास न करना पड़े:

|_+_|

|_+_| का सबसे बड़ा नुकसान यह है कि आउटपुट प्रकार का नाम नहीं दिया जा सकता है (रस्ट के आधिकारिक तौर पर अज्ञात रिकॉर्ड का समर्थन नहीं करने के कारण)। इसका समाधान करने के लिए, एक |_+_| है मैक्रो जो अधिकतर समान है सिवाय इसके कि आप आउटपुट प्रकार का नाम दे सकते हैं।

|_+_|

परियोजना को संकलित करने के लिए एक विकास डेटाबेस होने की आवश्यकता से बचने के लिए, भले ही कोई संशोधन (डेटाबेस के कोड के भाग तक पहुँचने के लिए) नहीं किया गया हो, आप SQL क्वेरी विश्लेषण के परिणामों को कैश करने के लिए 'ऑफ़लाइन मोड' को सक्षम कर सकते हैं |_+_| कमांड-लाइन टूल। sqlx-cli/README.md देखें।

संकलन समय सत्यापित प्रश्न संकलन समय पर काफी काम करते हैं। वृद्धिशील कार्रवाइयाँ जैसे |_+_| और |_+_| निम्नलिखित को अपने |_+_| में डालकर एक अनुकूलित बिल्ड का उपयोग करते समय उल्लेखनीय रूप से तेज़ हो सकता है (द कार्गो बुक के प्रोफाइल सेक्शन में अधिक जानकारी)

|_+_|

सुरक्षा

यह टोकरा |_+_| का उपयोग करता है यह सुनिश्चित करने के लिए कि सब कुछ 100% सुरक्षित जंग में लागू हो।

अगर |_+_| सुविधा सक्षम है, इसे डाउनग्रेड करके |_+_| कर दिया गया है के साथ |_+_| पर |_+_| मापांक। ऐसे कई स्थान हैं जहाँ हम C SQLite API के साथ इंटरैक्ट करते हैं। हम उन अपरिवर्तनीयताओं के लिए प्रत्येक कॉल को दस्तावेज करने का प्रयास करते हैं जिन्हें हम मान रहे हैं। हम अपने असुरक्षित कोड उपयोग के ऑडिटिंग और प्रतिक्रिया का स्वागत करते हैं।

विवरण डाउनलोड करें:
लेखक: लॉन्चबैज
स्रोत कोड: https://github.com/launchbadge/sqlx
लाइसेंस: Apache-2.0, MIT लाइसेंस मिला

#rust #rustlang #database

यह सभी देखें: