SQLAlchemy Core - การใช้คำสันธาน

คำสันธานเป็นฟังก์ชันในโมดูล SQLAlchemy ที่ใช้ตัวดำเนินการเชิงสัมพันธ์ที่ใช้ใน WHERE clause ของนิพจน์ SQL ตัวดำเนินการ AND, OR, NOT ฯลฯ ถูกใช้เพื่อสร้างนิพจน์สารประกอบที่รวมนิพจน์ตรรกะสองนิพจน์ ตัวอย่างง่ายๆของการใช้ AND ในคำสั่ง SELECT มีดังนี้ -

SELECT * from EMPLOYEE WHERE salary>10000 AND age>30

ฟังก์ชัน SQLAlchemy และ _ () หรือ_ () และ not_ () ใช้ตัวดำเนินการ AND, OR และ NOT ตามลำดับ

and_ () ฟังก์ชัน

มันสร้างการรวมกันของนิพจน์ที่เข้าร่วมโดย AND ตัวอย่างมีให้ด้านล่างเพื่อความเข้าใจที่ดีขึ้น -

from sqlalchemy import and_

print(
   and_(
      students.c.name == 'Ravi',
      students.c.id <3
   )
)

แปลว่า -

students.name = :name_1 AND students.id < :id_1

ในการใช้ and_ () ในโครงสร้าง select () บนโต๊ะนักเรียนให้ใช้โค้ดบรรทัดต่อไปนี้ -

stmt = select([students]).where(and_(students.c.name == 'Ravi', students.c.id <3))

คำสั่ง SELECT ของลักษณะต่อไปนี้จะถูกสร้างขึ้น -

SELECT students.id, 
   students.name, 
   students.lastname
FROM students
WHERE students.name = :name_1 AND students.id < :id_1

รหัสทั้งหมดที่แสดงผลลัพธ์ของแบบสอบถาม SELECT ด้านบนมีดังนี้ -

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, ForeignKey, select
engine = create_engine('sqlite:///college.db', echo = True)
meta = MetaData()
conn = engine.connect()

students = Table(
   'students', meta, 
   Column('id', Integer, primary_key = True), 
   Column('name', String), 
   Column('lastname', String), 
)

from sqlalchemy import and_, or_
stmt = select([students]).where(and_(students.c.name == 'Ravi', students.c.id <3))
result = conn.execute(stmt)
print (result.fetchall())

แถวต่อไปนี้จะถูกเลือกโดยสมมติว่าตารางนักเรียนมีข้อมูลที่ใช้ในตัวอย่างก่อนหน้านี้ -

[(1, 'Ravi', 'Kapoor')]

or_ () ฟังก์ชัน

มันสร้างการรวมกันของนิพจน์ที่เข้าร่วมโดย OR เราจะแทนที่วัตถุ stmt ในตัวอย่างข้างต้นด้วยสิ่งต่อไปนี้โดยใช้ or_ ()

stmt = select([students]).where(or_(students.c.name == 'Ravi', students.c.id <3))

ซึ่งจะมีประสิทธิภาพเทียบเท่ากับแบบสอบถาม SELECT ต่อไปนี้ -

SELECT students.id, 
   students.name, 
   students.lastname
FROM students
WHERE students.name = :name_1 
OR students.id < :id_1

เมื่อคุณทำการแทนที่และรันโค้ดด้านบนผลลัพธ์จะเป็นสองแถวที่อยู่ในเงื่อนไข OR -

[(1, 'Ravi', 'Kapoor'),
(2, 'Rajiv', 'Khanna')]

asc () ฟังก์ชัน

มันสร้างคำสั่งจากน้อยไปหามาก ฟังก์ชันนำคอลัมน์ไปใช้ฟังก์ชันเป็นพารามิเตอร์

from sqlalchemy import asc
stmt = select([students]).order_by(asc(students.c.name))

คำสั่งดำเนินการตามนิพจน์ SQL -

SELECT students.id, 
   students.name, 
   students.lastname
FROM students 
ORDER BY students.name ASC

รหัสต่อไปนี้แสดงรายการระเบียนทั้งหมดในตารางนักเรียนตามลำดับคอลัมน์ชื่อจากน้อยไปหามาก -

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, ForeignKey, select
engine = create_engine('sqlite:///college.db', echo = True)
meta = MetaData()
conn = engine.connect()

students = Table(
   'students', meta, 
   Column('id', Integer, primary_key = True), 
   Column('name', String), 
   Column('lastname', String), 
)

from sqlalchemy import asc
stmt = select([students]).order_by(asc(students.c.name))
result = conn.execute(stmt)

for row in result:
   print (row)

โค้ดด้านบนสร้างผลลัพธ์ต่อไปนี้ -

(4, 'Abdul', 'Sattar')
(3, 'Komal', 'Bhandari')
(5, 'Priya', 'Rajhans')
(2, 'Rajiv', 'Khanna')
(1, 'Ravi', 'Kapoor')

desc () ฟังก์ชัน

ในทำนองเดียวกันฟังก์ชัน desc () สร้างจากมากไปหาน้อยตามคำสั่งดังต่อไปนี้ -

from sqlalchemy import desc
stmt = select([students]).order_by(desc(students.c.lastname))

นิพจน์ SQL ที่เทียบเท่าคือ -

SELECT students.id, 
   students.name, 
   students.lastname
FROM students 
ORDER BY students.lastname DESC

และผลลัพธ์ของโค้ดด้านบนคือ -

(4, 'Abdul', 'Sattar')
(5, 'Priya', 'Rajhans')
(2, 'Rajiv', 'Khanna')
(1, 'Ravi', 'Kapoor')
(3, 'Komal', 'Bhandari')

ระหว่าง () ฟังก์ชัน

สร้างประโยคเพรดิเคตระหว่างกัน โดยทั่วไปจะใช้เพื่อตรวจสอบว่าค่าของคอลัมน์ใดคอลัมน์หนึ่งอยู่ระหว่างช่วง ตัวอย่างเช่นโค้ดต่อไปนี้จะเลือกแถวที่คอลัมน์ id อยู่ระหว่าง 2 ถึง 4 -

from sqlalchemy import between
stmt = select([students]).where(between(students.c.id,2,4))
print (stmt)

นิพจน์ SQL ที่ได้มีลักษณะคล้ายกับ -

SELECT students.id, 
   students.name, 
   students.lastname
FROM students
WHERE students.id 
BETWEEN :id_1 AND :id_2

และผลลัพธ์เป็นดังนี้ -

(2, 'Rajiv', 'Khanna')
(3, 'Komal', 'Bhandari')
(4, 'Abdul', 'Sattar')