SQLite เป็นฐานข้อมูลโอเพ่นซอร์สและไม่มีเซิร์ฟเวอร์ที่ไม่ต้องการการกำหนดค่า ฐานข้อมูลทั้งหมดเป็นไฟล์ดิสก์เดียวที่สามารถวางไว้ที่ใดก็ได้ในระบบไฟล์ของระบบปฏิบัติการ คำสั่ง SQLite คล้ายกับ SQL มาตรฐาน SQLite ถูกใช้อย่างกว้างขวางโดยแอปพลิเคชันเช่นเบราว์เซอร์สำหรับการจัดเก็บข้อมูลภายใน นอกจากนี้ยังเป็นการจัดเก็บข้อมูลที่สะดวกสำหรับอุปกรณ์ฝังตัว
ไลบรารี Python มาตรฐานมีการสนับสนุนการเชื่อมต่อฐานข้อมูล SQLite ในตัว ประกอบด้วยโมดูล sqlite3 ซึ่งเป็นโมดูลที่สอดคล้องกับ DB-API V2 ซึ่งเขียนโดย Gerhad Haring เป็นไปตาม DB-API 2.0
DB-API ได้รับการกำหนดตาม PEP-249 เพื่อให้แน่ใจว่ามีความคล้ายคลึงกันระหว่างโมดูล Python ที่ใช้ในการเข้าถึงผลิตภัณฑ์ฐานข้อมูลต่างๆ
ขั้นตอนแรกในกระบวนการจัดการฐานข้อมูลคือการขอรับวัตถุเชื่อมต่อที่เป็นตัวแทนของฐานข้อมูล ถัดไป ใช้การเชื่อมต่อ รับวัตถุเคอร์เซอร์ วัตถุเคอร์เซอร์คล้ายกับแนวคิดของตัววนซ้ำ มันถูกใช้ในการประมวลผลแต่ละแถวที่ส่งคืนโดยการสืบค้นฐานข้อมูล เคอร์เซอร์สามารถดูเป็นตัวชี้ไปยังหนึ่งแถวในชุดของแถวได้
ออบเจ็กต์เคอร์เซอร์ช่วยในการดำเนินการคำสั่ง SQL สำหรับการดำเนินการ CRUD บนฐานข้อมูลพื้นฐาน
ฟังก์ชันเชื่อมต่อ ()
ฟังก์ชันนี้ในโมดูล sqlite3 ส่งคืนอ็อบเจ็กต์การเชื่อมต่อที่แสดงถึงฐานข้อมูลที่มีอยู่บนดิสก์ หรือเปิดฐานข้อมูลใหม่หากยังไม่มีอยู่
import sqlite3 conn=sqlite3.connect('mydb.sqlite3')
SQLite รองรับการสร้างฐานข้อมูลในหน่วยความจำ ใช้ชื่อพิเศษ ':memory:' เพื่อจุดประสงค์นั้น
conn=sqlite3.connect(':memory:')
เมธอดต่อไปนี้ถูกกำหนดในคลาสการเชื่อมต่อ
เคอร์เซอร์() เมธอดนี้ส่งคืนวัตถุเคอร์เซอร์
cur=conn.cursor()
กระทำ() − วิธีการนี้จะทำธุรกรรมไปยังดิสก์อย่างต่อเนื่อง
ย้อนกลับ() - เมธอดนี้ย้อนกลับธุรกรรมเพื่อกู้คืนสถานะฐานข้อมูลเป็นการโทรครั้งสุดท้ายเพื่อคอมมิต () วิธีนี้ช่วยให้มั่นใจถึงความสอดคล้องของข้อมูลในกรณีที่มีข้อยกเว้นในธุรกรรม SQL
try: conn.commit() except: conn.rollback()
ดำเนินการ() − สร้างเคอร์เซอร์โดยปริยายและเรียกใช้เมธอด execute()
executeman() − เมธอดนี้สร้างเคอร์เซอร์โดยปริยายและเรียกใช้เมธอด executemany()
create_function() − เมธอดนี้จะสร้างฟังก์ชันที่ผู้ใช้กำหนดเองซึ่งคุณสามารถใช้ในภายหลังจากภายในคำสั่ง SQL
create_aggregate() − เมธอดนี้จะสร้างฟังก์ชันการรวม
iterdump() − วิธีการนี้จะสร้างดัมพ์ของฐานข้อมูลในรูปแบบข้อความ SQL
import sqlite3 con = sqlite3.connect('mydb.sqlite3') f = dump.sql', 'w') for line in con.iterdump(): f.write('%s\n' % line)
สำรอง() − วิธีการนี้จะสร้างการสำรองข้อมูลของฐานข้อมูล SQLite แม้ในขณะที่กำลังเข้าถึงอยู่
source = sqlite3.connect('mydb.sqlite3') dest = sqlite3.connect(':memory:') source.backup(dest)
วัตถุเคอร์เซอร์
เคอร์เซอร์ที่ได้รับจากการเชื่อมต่อวัตถุอำนวยความสะดวกในการดำเนินการต่างๆ ของ SQL บนฐานข้อมูลโดยใช้วิธีดำเนินการ () ตัวอย่างเช่น คำสั่งต่อไปนี้จะสร้างตารางในฐานข้อมูลปัจจุบัน
cur = conn.cursor() cur.execute("CREATE TABLE guests ( ID INTEGER PRIMARY KEY, name TEXT (20) NOT NULL, address TEXT (40), city TEXT (20) );"
ต่อไปนี้แทรกระเบียนในตาราง
cur.execute('''INSERT INTO GUESTS VALUES(1,'RAJU','ABIDS', 'HYDERABAD');''')
ใช้วิธี executemany() เพื่อดำเนินการเพิ่มจำนวนมาก
addreses=[(2,'KISHAN', 'TILAK ROAD', 'PUNE'), (3, 'LATA', 'GAANDHI NAGAR', 'AURANGABAD')] sql='INSERT INTO GUESTS VALUES (:ID, :NAME, :ADD, :CITY)' cur.executemany(sql, addreses)
แบบสอบถาม SELECT สร้างชุดผลลัพธ์ที่มีระเบียนทั้งหมดที่ส่งคืนเป็นการตอบกลับแบบสอบถาม วิธีดำเนินการ () ใช้สตริงที่แสดงถึงคำสั่งแบบสอบถาม SELECT DB-API มีสองวิธีในการดึงแถวในเคอร์เซอร์แทนชุดผลลัพธ์
fetchone() − ดึงข้อมูลระเบียนถัดไปจากชุดผลลัพธ์ในรูปแบบ tuple ที่ประกอบด้วยค่าของแต่ละคอลัมน์ของระเบียนที่ดึงมา
fetchall() − ดึงบันทึกที่เหลือทั้งหมดในรูปแบบของรายการทูเพิล ทูเพิลแต่ละตัวสอดคล้องกับหนึ่งแถวและมีค่าของแต่ละคอลัมน์ในตาราง
รหัสต่อไปนี้ใช้วิธี fetchone() เพื่อแสดงรายการระเบียนทั้งหมดในตารางผู้เยี่ยมชม
sql = "SELECT * from guests;" cur = db.cursor() cur.execute(sql) while True: record=cur.fetchone() if record==None: break print (record)
การใช้เมธอด fetchall() แสดงให้เห็นโดยคำสั่งต่อไปนี้
sql = "SELECT * from guests;" cur = db.cursor() cur.execute(sql) set = cur.fetchall() for record in set: print (record)
ประเภท SQLite และ Python
โดยค่าเริ่มต้น ชนิดข้อมูล SQLite จะถูกแมปกับชนิดข้อมูล Python ที่เทียบเท่ากันตามตารางต่อไปนี้
ประเภทหลาม | SQLite type |
---|---|
ไม่มี | NULL |
int | INTEGER |
ลอย | จริง |
str | TEXT |
ไบต์ | BLOB |
ข้อยกเว้น
DB-API กำหนดข้อยกเว้นต่อไปนี้เกี่ยวกับการดำเนินการของ SQL กับฐานข้อมูล SQLite -
DatabaseError | มีข้อยกเว้นสำหรับข้อผิดพลาดที่เกี่ยวข้องกับฐานข้อมูล |
IntegrityError | ข้อยกเว้นเกิดขึ้นเมื่อความสมบูรณ์เชิงสัมพันธ์ของฐานข้อมูลได้รับผลกระทบ เช่น การตรวจสอบกุญแจต่างประเทศล้มเหลว เป็นคลาสย่อยของ DatabaseError |
ProgrammingError | มีข้อยกเว้นสำหรับข้อผิดพลาดในการเขียนโปรแกรม เช่น ไม่พบตารางหรือมีอยู่แล้ว ข้อผิดพลาดทางไวยากรณ์ในคำสั่ง SQL ระบุจำนวนพารามิเตอร์ที่ไม่ถูกต้อง เป็นต้น |
OperationalError | มีข้อยกเว้นสำหรับข้อผิดพลาดที่เกี่ยวข้องกับการทำงานของฐานข้อมูลและไม่จำเป็นต้องอยู่ภายใต้การควบคุมของโปรแกรมเมอร์ |
NotSupportedError | มีข้อยกเว้นในกรณีที่มีการใช้เมธอดหรือฐานข้อมูล API ซึ่งฐานข้อมูลไม่รองรับ |