SQLAlchemy Core - การเลือกแถว

ในบทนี้เราจะพูดถึงแนวคิดในการเลือกแถวในวัตถุตาราง

วิธี select () ของวัตถุตารางช่วยให้เราสามารถ construct SELECT expression.

s = students.select()

วัตถุที่เลือกจะแปลเป็น SELECT query by str(s) function ดังแสดงด้านล่าง -

'SELECT students.id, students.name, students.lastname FROM students'

เราสามารถใช้วัตถุที่เลือกนี้เป็นพารามิเตอร์เพื่อดำเนินการ () วิธีการของวัตถุการเชื่อมต่อดังที่แสดงในโค้ดด้านล่าง -

result = conn.execute(s)

เมื่อคำสั่งดังกล่าวถูกดำเนินการ Python shell จะสะท้อนตามนิพจน์ SQL ที่เทียบเท่า -

SELECT students.id, students.name, students.lastname
FROM students

ตัวแปรผลลัพธ์เทียบเท่าเคอร์เซอร์ใน DBAPI ตอนนี้เราสามารถดึงข้อมูลโดยใช้ไฟล์fetchone() method.

row = result.fetchone()

แถวที่เลือกทั้งหมดในตารางสามารถพิมพ์ได้โดยไฟล์ for loop ตามที่ระบุด้านล่าง -

for row in result:
   print (row)

รหัสที่สมบูรณ์ในการพิมพ์แถวทั้งหมดจากตารางนักเรียนแสดงอยู่ด้านล่าง -

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

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

s = students.select()
conn = engine.connect()
result = conn.execute(s)

for row in result:
   print (row)

ผลลัพธ์ที่แสดงใน Python shell มีดังนี้ -

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

คำสั่ง WHERE ของแบบสอบถาม SELECT สามารถนำไปใช้โดยใช้ Select.where(). ตัวอย่างเช่นหากเราต้องการแสดงแถวที่มี id> 2

s = students.select().where(students.c.id>2)
result = conn.execute(s)

for row in result:
   print (row)

ที่นี่ c attribute is an alias for column. ผลลัพธ์ต่อไปนี้จะแสดงบนเปลือก -

(3, 'Komal', 'Bhandari')
(4, 'Abdul', 'Sattar')
(5, 'Priya', 'Rajhans')

ที่นี่เราต้องทราบว่าวัตถุที่เลือกสามารถหาได้จากฟังก์ชัน select () ในโมดูล sqlalchemy.sql ฟังก์ชัน select () ต้องการวัตถุตารางเป็นอาร์กิวเมนต์

from sqlalchemy.sql import select
s = select([users])
result = conn.execute(s)