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')