วิธีสร้างแอปลงทะเบียนด้วย Python และฐานข้อมูล
Python มีการรองรับฐานข้อมูลที่ยอดเยี่ยมที่สร้างไว้ในไลบรารีมาตรฐาน ดังนั้นคุณจึงสามารถสร้างและโต้ตอบกับฐานข้อมูลได้โดยไม่ต้องอาศัยเฟรมเวิร์กภายนอก เช่น Django ORM
การบูรณาการของ Python กับ SQLite มอบโซลูชันที่มีประสิทธิภาพสำหรับการจัดการพื้นที่จัดเก็บข้อมูลผ่านโครงสร้างที่มีน้ำหนักเบา ทำให้นักพัฒนาที่ต้องการปรับปรุงแอปพลิเคชันของตนสามารถเข้าถึงได้ ด้วยการใช้แอปพลิเคชันลงทะเบียนผู้ใช้ที่ตรงไปตรงมา ผู้ใช้จะได้รับข้อมูลเชิงลึกเกี่ยวกับแนวคิดพื้นฐานของการเขียนโปรแกรมฐานข้อมูลภายในระบบนิเวศของ Python
วิธีสร้างฐานข้อมูลใน Python
โค้ดที่ใช้ในบทช่วยสอนนี้มีอยู่ในพื้นที่เก็บข้อมูล GitHub ซึ่งคุณสามารถเข้าถึงได้เพื่อสำรวจและนำแนวคิดที่กล่าวถึงในที่นี้ไปใช้
ในการสร้างการสื่อสารกับฐานข้อมูลโดยใช้ Python จำเป็นต้องมีทั้งวัตถุการเชื่อมต่อและวัตถุเคอร์เซอร์ แบบแรกช่วยให้สามารถสร้างการเชื่อมโยงระหว่างแอปพลิเคชันและฐานข้อมูล ในขณะที่แบบหลังอนุญาตให้ดำเนินการคำสั่ง SQL ภายในฐานข้อมูล
ในการสร้างการเชื่อมต่อระหว่างแอปพลิเคชัน Python ของคุณกับฐานข้อมูลที่มีอยู่ หรือสร้างใหม่โดยใช้ SQLite มีขั้นตอนเฉพาะที่ต้องปฏิบัติตาม กระบวนการสร้างการเชื่อมต่อฐานข้อมูลใน Python สำหรับ SQLite เกี่ยวข้องกับองค์ประกอบหลักหลายประการ เช่น การระบุกลไกฐานข้อมูล การให้ข้อมูลประจำตัวที่จำเป็น การกำหนดพารามิเตอร์การเชื่อมต่อ และสุดท้ายคือการเชื่อมต่อกับอินสแตนซ์ฐานข้อมูลที่ต้องการ ด้วยการปฏิบัติตามขั้นตอนเหล่านี้อย่างระมัดระวัง คุณจะสามารถสร้างการเชื่อมต่อฐานข้อมูลที่ปลอดภัยและมีประสิทธิภาพภายในโค้ดเบส Python ของคุณโดยใช้พลังของ SQLite ได้สำเร็จ
import sqlite3
# Connect to a (new) database
conn = sqlite3.connect('path/to/database.db')
# Close the connection
conn.close()
เมธอด connect()
ยอมรับไดเร็กทอรีที่แสดงไฟล์ฐานข้อมูลที่มีอยู่ ในกรณีที่เส้นทางที่ระบุไม่มีฐานข้อมูลใด ๆ ก็จะสร้างฐานข้อมูลขึ้นมา ขอแนะนำให้ปล่อยการเชื่อมต่อฐานข้อมูลเมื่อการโต้ตอบเสร็จสิ้นเพื่อการจัดการทรัพยากรที่มีประสิทธิภาพ
เพื่ออำนวยความสะดวกในการโต้ตอบกับฐานข้อมูลที่เชื่อมต่อใน Python คุณจำเป็นต้องใช้เคอร์เซอร์ การใช้เคอร์เซอร์ช่วยให้สามารถดำเนินการสืบค้น Structured Query Language (SQL) ภายในขอบเขตของโปรแกรม Python เมื่อต้องการสร้างเคอร์เซอร์ ให้ทำตามขั้นตอนเหล่านี้:
cursor = conn.cursor()
# Close the cursor
cursor.close()
ออบเจ็กต์การเชื่อมต่อแบบเปิดอาจใช้เพื่อสร้างเคอร์เซอร์โดยเรียกใช้เมธอด cursor()
วิธีดำเนินธุรกรรมฐานข้อมูลใน Python
การใช้เคอร์เซอร์ทำให้สามารถรันคำสั่ง SQL การสอบถาม หรือลำดับสคริปต์ เพื่อวัตถุประสงค์ในการเรียกค้นหรือแก้ไขข้อมูล หรือปรับการกำหนดค่าของสคีมาฐานข้อมูล
มีสามแนวทางหลักที่อาจใช้เพื่อดำเนินธุรกรรมฐานข้อมูล ได้แก่:
⭐ เคอร์เซอร์.execute. วิธีนี้จะรันคำสั่ง SQL เดียว นี่คือวิธีการใช้งาน:
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
name TEXT,
age INTEGER
)
""")
รหัสนี้เรียกวิธีการดำเนินการบนเคอร์เซอร์ โดยส่งผ่านสตริงที่มีคำสั่ง SQL
⭐ Cursor.execute มากมาย. วิธีนี้ช่วยให้คุณรันคำสั่ง SQL เดียวกันได้มากกว่าหนึ่งครั้ง โดยมีพารามิเตอร์ต่างกันในแต่ละครั้ง ต้องใช้สองอาร์กิวเมนต์: คำสั่ง SQL และแบบวนซ้ำได้ การใช้งานที่ดีคือการแทรกวัตถุหลายรายการลงในฐานข้อมูลพร้อมกัน:
data = [
('Alice', 25),
('Bob', 30),
('Charlie', 22)
]
cursor.executemany("""INSERT INTO users (name, age) VALUES (?, ?)""", data)
โค้ดด้านบนใช้เมธอดExecuteManyเพื่อแทรกค่าลงในฐานข้อมูลหลายครั้ง
โปรดจดบันทึกอินสแตนซ์ตัวยึดตำแหน่งที่มีอยู่ในคำสั่ง SQL ที่กำหนด วิธีการ executany
จะแทรกข้อมูลที่เกี่ยวข้องสำหรับแต่ละรายการในภายหลัง
⭐ Cursor.executescript. ตามชื่อที่แนะนำ วิธีนี้จะรันสคริปต์ SQL ให้กับคุณ คุณสามารถเขียนคำสั่ง SQL ของคุณในไฟล์อื่นและรันคำสั่งเหล่านั้นด้วยวิธีเอ็กซีคิวต์สคริปต์:
with open("path/to/script.sql") as file:
sql_script = file.read()
cursor.executescript(sql_script)
วิธีสร้างแอปลงทะเบียนด้วย Python และ SQLite3
การพัฒนาแอปพลิเคชันการลงทะเบียนที่มีประสิทธิภาพจำเป็นต้องเก็บข้อมูลของผู้ใช้ปลายทางโดยใช้ Python จากนั้นจึงเก็บรักษาไว้ในระบบจัดการฐานข้อมูลเชิงสัมพันธ์ เช่น SQLite3 แนวทางชุดนี้จะแสดงกระบวนการสร้างแพลตฟอร์มการลงทะเบียนขั้นพื้นฐานโดยใช้ Python และ SQLite3
ขั้นตอนที่ 1: เชื่อมต่อกับฐานข้อมูลที่มีอยู่หรือสร้างฐานข้อมูลใหม่
เพื่อเริ่มการทำงานของแอปพลิเคชันของคุณ จำเป็นต้องสร้างฐานข้อมูลใหม่หรือบูรณาการกับฐานข้อมูลที่มีอยู่
import sqlite3
conn = sqlite3.connect('database.db')
cursor = conn.cursor()
# your app's code goes here
cursor.close()
conn.close()
รหัสจะสร้างการเชื่อมต่อกับฐานข้อมูลโดยการสร้างออบเจ็กต์การเชื่อมต่อ ซึ่งอำนวยความสะดวกในการสื่อสารระหว่างแอปพลิเคชันและฐานข้อมูล นอกจากนี้ยังสร้างเคอร์เซอร์ที่ช่วยให้ดึงข้อมูลจากฐานข้อมูลเพื่อตอบสนองต่อคำสั่ง SQL ได้อย่างมีประสิทธิภาพ
ขั้นตอนที่ 2: สร้างตารางสำหรับผู้ใช้
ในการสร้างที่เก็บข้อมูลสำหรับการลงทะเบียนผู้ใช้ จำเป็นต้องสร้างตารางโดยใช้เคอร์เซอร์ของเมาส์ สามารถทำได้โดยใช้ขั้นตอนต่อไปนี้:
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
first_name TEXT,
last_name TEXT,
email TEXT UNIQUE,
password TEXT
)
""")
conn.commit()
การใช้งานในปัจจุบันอำนวยความสะดวกในการสร้างตารางชื่อ “ผู้ใช้” ภายในฐานข้อมูลที่มีอยู่ หากยังไม่ได้สร้าง ด้วยกระบวนการนี้ จะมีการสร้างคอลัมน์ที่แตกต่างกันสี่คอลัมน์เพื่อรองรับข้อมูลที่เกี่ยวข้องกับผู้ใช้แต่ละราย โดยเฉพาะอย่างยิ่ง การจัดหาช่อง"อีเมล"ที่เป็นเอกพจน์ทำหน้าที่เป็นกลไกในการป้องกันไม่ให้ผู้ใช้สร้างการลงทะเบียนหลายรายการภายใต้ที่อยู่อีเมลที่เหมือนกัน ดังนั้นจึงทำให้มั่นใจได้ว่าแต่ละบัญชียังคงสามารถระบุตัวตนได้และมีความโดดเด่นไม่ซ้ำกัน
แท้จริงแล้ว การดำเนินการของ conn.commit
มีความสำคัญอย่างยิ่งในการส่งการสืบค้นไปยังฐานข้อมูล หากไม่มีการแก้ไขใด ๆ ก็จะไม่สะท้อนให้เห็นในฐานข้อมูล
การใช้เมธอด executscript
ถือเป็นอีกทางเลือกหนึ่งโดยการรวมคำสั่ง COMMIT
เข้าไว้ในสคริปต์ SQL โดยตรง ดังนั้นจึงไม่จำเป็นต้องเรียก conn.commit
อย่างชัดเจน
ขั้นตอนที่ 3: รวบรวมข้อมูลผู้ใช้
การรวมฟังก์ชัน Python เข้าด้วยกันจะอำนวยความสะดวกในการรีไซเคิลโค้ด ทำให้สร้างฟังก์ชันที่จัดการด้านการลงทะเบียนอย่างรอบคอบ ฟังก์ชั่นนี้จะรวบรวมชื่อ นามสกุล อีเมล และรหัสผ่านของผู้ใช้
def register_user():
first_name = input("Enter your first name: ")
last_name = input("Enter your last name: ")
email = input("Enter your email: ")
password1 = input("Enter your password: ")
password2 = input("Confirm your password: ")
ขั้นตอนที่ 4: ตรวจสอบความถูกต้องของรหัสผ่าน
แน่นอนว่า นี่คือตัวอย่างวิธีที่คุณสามารถแก้ไขฟังก์ชัน register\_user
ใน Python เพื่อกำหนดให้ผู้ใช้ป้อนรหัสผ่านสองครั้ง และแจ้งให้ป้อนใหม่หากไม่ตรงกัน:pythondef register_user(ชื่อผู้ใช้, อีเมล, รหัสผ่าน):# Check ถ้าชื่อผู้ใช้มีอยู่แล้วsexisting_user=User.objects.filter(username=username).first()if existing_user:raise ValueError(“ชื่อผู้ใช้ถูกนำไปใช้แล้ว”)# สร้างผู้ใช้ใหม่ objectuser=User.objects.create_user(ชื่อผู้ใช้, อีเมล, รหัสผ่าน)# บันทึกวัตถุผู้ใช้ไปที่databaseuser.save()return f"{username}, {email}-{password}"
def register_user():
first_name = input("Enter your first name: ")
last_name = input("Enter your last name: ")
email = input("Enter your email: ")
while True:
password1 = input("Enter your password: ")
password2 = input("Confirm your password: ")
# Check password correctness
if password1 == password2:
print("You have successfully registered!")
break
else:
print("Your passwords must match")
เพื่อให้มั่นใจว่าการสร้างบัญชีมีความถูกต้อง ขณะนี้ผู้ใช้จำเป็นต้องตรวจสอบว่ารหัสผ่านที่ให้มานั้นเหมือนกันเมื่อลงทะเบียน มาตรการนี้ขจัดความคลาดเคลื่อนที่อาจเกิดขึ้นในการผสมชื่อผู้ใช้และรหัสผ่าน จึงช่วยปรับปรุงความสมบูรณ์ของระบบโดยรวม
ขั้นตอนที่ 5: ตรวจสอบความเป็นเอกลักษณ์ของอีเมล
คำสั่ง SQL ที่สร้างตารางผู้ใช้กำหนดว่าฟิลด์อีเมลจะต้องไม่ซ้ำกัน ดังนั้นในกรณีที่ผู้ใช้พยายามลงทะเบียนโดยใช้ที่อยู่อีเมลที่ลงทะเบียนไว้ก่อนหน้านี้ ระบบจัดการฐานข้อมูลจะสร้างข้อยกเว้นขึ้นมา เพื่อให้แอปพลิเคชันของคุณตอบสนองต่อสถานการณ์นี้ได้อย่างมีประสิทธิภาพและสวยงาม จำเป็นต้องใช้กลไกการจัดการที่เหมาะสมภายในโค้ด Python ของคุณเพื่อจัดการและประมวลผลข้อยกเว้นที่สร้างขึ้น
def register_user():
first_name = input("Enter your first name: ")
last_name = input("Enter your last name: ")
while True:
email = input("Enter your email: ")
password1 = input("Enter your password: ")
password2 = input("Confirm your password: ")
# Check password correctness
if password1 == password2:
try:
print("You have successfully created an account.")
break
except sqlite3.IntegrityError:
print("Error: This email is already registered.")
else:
print("Your passwords must match.")
การใช้งานปัจจุบันใช้ส่วนคำสั่ง try-ยกเว้น เพื่อจัดการข้อผิดพลาดใดๆ ที่เกิดจากที่อยู่อีเมลที่ซ้ำกันระหว่างการดำเนินการฐานข้อมูล ในกรณีที่พบ IntegrityError ในระหว่างกระบวนการวนซ้ำ โฟลว์การควบคุมจะถูกส่งกลับไปยังการร้องขออินพุตสำหรับที่อยู่อีเมลที่แตกต่างจากผู้ใช้
ในแอปพลิเคชันเฉพาะนี้ มีความสมเหตุสมผลที่จะสันนิษฐานว่าอินสแตนซ์ใดๆ ของ IntegrityError ที่เกิดจากการสร้างบัญชีผู้ใช้ใหม่อาจมีสาเหตุมาจากการมีที่อยู่อีเมลที่ซ้ำกัน อย่างไรก็ตาม ในทางปฏิบัติ อาจใช้วิธีการที่ครอบคลุมมากขึ้นในการจัดการกับข้อผิดพลาด ซึ่งอาจรวมถึงปัญหาเพิ่มเติมนอกเหนือจากการซ้ำกันภายในโดเมนอีเมล
ขั้นตอนที่ 6: ใส่ข้อมูลของผู้ใช้ลงในฐานข้อมูล
การรวมข้อมูลที่รวบรวมจากผู้ใช้ลงในฐานข้อมูลจำเป็นต้องมีการดำเนินการคำสั่ง Structured Query Language (SQL) เพื่อให้งานนี้สำเร็จ อาจใช้แบบสอบถาม SQL ภายในโปรแกรมของตน ด้วยการปรับบล็อก try-ยกเว้น ตามนั้น แอปพลิเคชันจึงสามารถจัดเก็บรายละเอียดของผู้ใช้ในฐานข้อมูลได้สำเร็จ
try:
cursor.execute("""
INSERT INTO users (first_name, last_name, email, password)
VALUES (?, ?, ?, ?)
""", (first_name, last_name, email, password2))
conn.commit()
print("You have successfully created an account.")
break
except sqlite3.IntegrityError:
print("Error: This email is already registered.")
ในคำสั่ง try-ยกเว้น ที่อัพเดต เคอร์เซอร์จะดำเนินการแทรก SQL ต่อมาเมธอด conn.commit
จะเริ่มการดำเนินการ SQL บนฐานข้อมูล
หากคุณทำตามขั้นตอนทั้งหมดข้างต้น คุณควรมีแอปพลิเคชันที่ลงทะเบียนผู้ใช้และบันทึกลงในฐานข้อมูล คุณสามารถใช้แอปเช่น DB Browser สำหรับ SQLite เพื่อดูเนื้อหาของฐานข้อมูลของคุณได้:
การใช้ฐานข้อมูลแทนประเภทคอลเลกชัน
สำหรับแอปพลิเคชันขนาดเล็กที่มีโครงสร้างข้อมูลที่ค่อนข้างตรงไปตรงมา การสร้างคำสั่ง SQL แบบกำหนดเองหรือการใช้ไลบรารี Object Relational Mapping (ORM) แบบน้ำหนักเบา เช่น SQLAlchemy อาจเป็นแนวทางที่ใช้งานได้จริง อย่างไรก็ตาม เมื่อมีการพัฒนาระบบที่ใหญ่ขึ้นและซับซ้อนมากขึ้น ซึ่งความสัมพันธ์ของข้อมูลมีความซับซ้อนมากขึ้น การใช้ประโยชน์จากกรอบงานที่กำหนดไว้ เช่น ORM ของ Django สามารถให้ข้อได้เปรียบที่สำคัญในแง่ของประสิทธิภาพ การบำรุงรักษา และความสามารถในการขยายได้
เพื่อฝึกฝนความเชี่ยวชาญของคุณในการดำเนินงานฐานข้อมูลระดับต่ำ ให้พิจารณาใช้กลไกการเข้าสู่ระบบที่เสริมกระบวนการลงทะเบียนผู้ใช้ที่มีอยู่