Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

อินเตอร์เฟส Python สำหรับฐานข้อมูล SQLite


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 ซึ่งฐานข้อมูลไม่รองรับ