Contents

วิธีสร้างแอปลงทะเบียนด้วย 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 เพื่อดูเนื้อหาของฐานข้อมูลของคุณได้:

/th/images/sqlite-browse-database-1.jpg

การใช้ฐานข้อมูลแทนประเภทคอลเลกชัน

สำหรับแอปพลิเคชันขนาดเล็กที่มีโครงสร้างข้อมูลที่ค่อนข้างตรงไปตรงมา การสร้างคำสั่ง SQL แบบกำหนดเองหรือการใช้ไลบรารี Object Relational Mapping (ORM) แบบน้ำหนักเบา เช่น SQLAlchemy อาจเป็นแนวทางที่ใช้งานได้จริง อย่างไรก็ตาม เมื่อมีการพัฒนาระบบที่ใหญ่ขึ้นและซับซ้อนมากขึ้น ซึ่งความสัมพันธ์ของข้อมูลมีความซับซ้อนมากขึ้น การใช้ประโยชน์จากกรอบงานที่กำหนดไว้ เช่น ORM ของ Django สามารถให้ข้อได้เปรียบที่สำคัญในแง่ของประสิทธิภาพ การบำรุงรักษา และความสามารถในการขยายได้

เพื่อฝึกฝนความเชี่ยวชาญของคุณในการดำเนินงานฐานข้อมูลระดับต่ำ ให้พิจารณาใช้กลไกการเข้าสู่ระบบที่เสริมกระบวนการลงทะเบียนผู้ใช้ที่มีอยู่