SQLAlchemy Core - शाब्दिक SQL का उपयोग करना

SQLAlchemy आपको केवल उन स्ट्रिंग्स का उपयोग करने देता है, उन मामलों के लिए जब SQL पहले से ही जाना जाता है और डायनामिक सुविधाओं का समर्थन करने के लिए कथन की तीव्र आवश्यकता नहीं है। पाठ () निर्माण का उपयोग एक शाब्दिक कथन की रचना करने के लिए किया जाता है जो डेटाबेस में ज्यादातर अपरिवर्तित होता है।

यह एक नया निर्माण करता है TextClauseनीचे दिए गए कोड में दिखाए गए अनुसार एक सीधे एसक्यूएल स्ट्रिंग का प्रतिनिधित्व करते हुए -

from sqlalchemy import text
t = text("SELECT * FROM students")
result = connection.execute(t)

फायदे text() एक सादे तार पर उपलब्ध हैं -

  • बाइंड मापदंडों के लिए बैकएंड-तटस्थ समर्थन
  • प्रति कथन निष्पादन विकल्प
  • परिणाम-स्तंभ टाइपिंग व्यवहार

पाठ () फ़ंक्शन को नामित कॉलोन प्रारूप में बाध्य मापदंडों की आवश्यकता होती है। वे डेटाबेस बैकएंड की परवाह किए बिना सुसंगत हैं। मापदंडों के लिए मान भेजने के लिए, हम उन्हें अतिरिक्त तर्कों के रूप में निष्पादित () विधि में पास करते हैं।

निम्नलिखित उदाहरण पाठ एसक्यूएल में बाध्य मापदंडों का उपयोग करता है -

from sqlalchemy.sql import text
s = text("select students.name, students.lastname from students where students.name between :x and :y")
conn.execute(s, x = 'A', y = 'L').fetchall()

पाठ () फ़ंक्शन SQL अभिव्यक्ति का निर्माण निम्नानुसार करता है -

select students.name, students.lastname from students where students.name between ? and ?

X = 'A' और y = 'L' के मान को पैरामीटर के रूप में पारित किया जाता है। परिणाम 'A' और 'L' के नाम वाली पंक्तियों की एक सूची है -

[('Komal', 'Bhandari'), ('Abdul', 'Sattar')]

पाठ () निर्माण TextClause.bindparams () पद्धति का उपयोग करके पूर्व-स्थापित बाध्य मानों का समर्थन करता है। मापदंडों को स्पष्ट रूप से निम्न प्रकार से टाइप किया जा सकता है -

stmt = text("SELECT * FROM students WHERE students.name BETWEEN :x AND :y")

stmt = stmt.bindparams(
   bindparam("x", type_= String), 
   bindparam("y", type_= String)
)

result = conn.execute(stmt, {"x": "A", "y": "L"})

The text() function also be produces fragments of SQL within a select() object that 
accepts text() objects as an arguments. The “geometry” of the statement is provided by 
select() construct , and the textual content by text() construct. We can build a statement 
without the need to refer to any pre-established Table metadata. 

from sqlalchemy.sql import select
s = select([text("students.name, students.lastname from students")]).where(text("students.name between :x and :y"))
conn.execute(s, x = 'A', y = 'L').fetchall()

आप भी उपयोग कर सकते हैं and_() पाठ () फ़ंक्शन की सहायता से WHERE क्लॉज़ में कई स्थितियों को संयोजित करने के लिए फ़ंक्शन।

from sqlalchemy import and_
from sqlalchemy.sql import select
s = select([text("* from students")]) \
.where(
   and_(
      text("students.name between :x and :y"),
      text("students.id>2")
   )
)
conn.execute(s, x = 'A', y = 'L').fetchall()

उपरोक्त कोड में "A" और "L" के बीच के नाम के साथ पंक्तियाँ हैं। आईडी से अधिक 2. कोड का आउटपुट नीचे दिया गया है -

[(3, 'Komal', 'Bhandari'), (4, 'Abdul', 'Sattar')]