如何使用 Python 和資料庫建立註冊應用程式
Python 在其標準庫中內建了出色的資料庫支持,因此您可以建立資料庫並與資料庫交互,而無需依賴 Django ORM 等外部框架。
Python 與 SQLite 的整合透過其輕量級結構提供了管理資料儲存的有效解決方案,使尋求增強應用程式的開發人員可以使用它。透過實現一個簡單的用戶註冊應用程序,人們可以深入了解 Python 生態系統中資料庫程式設計的基本概念。
如何用 Python 建立資料庫
本教學中使用的程式碼可在 GitHub 儲存庫中找到,您可以存取該儲存庫來探索和實作本文中討論的概念。
為了使用 Python 與資料庫建立通信,必須同時擁有連接物件和遊標物件。前者允許在應用程式和資料庫之間建立鏈接,而後者允許在資料庫內執行SQL語句。
為了在 Python 應用程式和現有資料庫之間建立連接,或使用 SQLite 建立新資料庫,必須遵循特定步驟。在 Python 中為 SQLite 建立資料庫連接的過程涉及幾個關鍵元件,例如指定資料庫引擎、提供必要的憑證、定義連接參數以及最終連接到所需的資料庫實例。透過仔細遵循這些步驟,可以利用 SQLite 的強大功能在 Python 程式碼庫中成功建立安全且高效的資料庫連線。
import sqlite3
# Connect to a (new) database
conn = sqlite3.connect('path/to/database.db')
# Close the connection
conn.close()
connect()
方法接受代表現有資料庫檔案的目錄。如果指定的路徑不包含任何資料庫,則會建立一個。建議交互完成後釋放資料庫連接,以實現高效的資源管理。
為了方便在Python中與連接的資料庫進行交互,有必要使用遊標。遊標的實作允許在 Python 程式範圍內執行結構化查詢語言 (SQL) 查詢。若要建立遊標,請依照下列步驟操作:
cursor = conn.cursor()
# Close the cursor
cursor.close()
可以利用開啟的連接物件透過呼叫其「cursor()」方法來產生遊標。
如何在 Python 中執行資料庫事務
使用遊標可以執行 SQL 語句、查詢或腳本序列,以檢索或修改數據,或調整資料庫模式的配置。
人們可以採用三種主要方法來執行資料庫事務,即:
⭐ 遊標.執行。此方法將執行單一 SQL 語句。使用方法如下:
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
name TEXT,
age INTEGER
)
""")
此程式碼呼叫遊標上的執行方法,並向其傳遞一個包含 SQL 語句的字串。
⭐ Cursor.executemany 。此方法允許您多次執行相同的 SQL 語句,每次使用不同的參數。它需要兩個參數:SQL 語句和一個可迭代物件。它的一個很好的用途是一次將多個物件插入資料庫:
data = [
('Alice', 25),
('Bob', 30),
('Charlie', 22)
]
cursor.executemany("""INSERT INTO users (name, age) VALUES (?, ?)""", data)
上面的程式碼使用executemany方法多次向資料庫插入值。
請注意給定 SQL 語句中出現的佔位符實例。 executemany
方法隨後應為每個單獨的項目插入相應的資料。
⭐ Cursor.executescript 。顧名思義,此方法將為您執行 SQL 腳本。您可以在不同的檔案中編寫 SQL 語句並使用executescript 方法執行它們:
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()
如果尚未建立的話,本實施方式有助於在現有資料庫內產生名為「users」的表。透過此過程,建立了四個不同的欄位來容納與各個使用者相關的資料。特別是,提供單一「電子郵件」欄位作為一種機制,防止使用者在相同的電子郵件地址下建立多個註冊,從而確保每個帳戶保持唯一可識別性和獨特性。
事實上,「conn.commit」的執行對於將查詢提交到資料庫至關重要,否則任何修改都不會反映在資料庫中。
利用「executescript」方法提供了一種替代方法,將「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:檢查密碼正確性
當然,這裡有一個範例,說明如何修改 Python 中的 register\_user
函數,要求使用者輸入密碼兩次,如果不符合則提示重新輸入:pythondef register_user(username, email,password):# Check如果使用者名稱已存在existing_user=User.objects.filter(username=username).first()if命為user:raise ValueError(「使用者名稱已被佔用」)#建立新使用者物件user=User.objects.create_user(使用者名稱,電子郵件,密碼)#將使用者物件儲存到資料庫user.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:檢查電子郵件的唯一性
建立users表的SQL語句規定email欄位必須是唯一的。因此,如果使用者嘗試使用先前註冊的電子郵件地址進行註冊,資料庫管理系統將產生異常。為了使您的應用程式能夠有效且優雅地應對這種情況,有必要在 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-except 子句來管理資料庫操作期間因重複電子郵件地址而導致的任何錯誤。如果在迭代過程中遇到完整性錯誤,控制流程將被引導回輸入請求,以取得來自使用者的不同電子郵件地址。
在此特定應用程式中,可以合理地假設,由於建立新使用者帳戶而產生的任何 IntegrityError 實例都是由重複的電子郵件地址引起的。然而,在實際設定中,人們可能會採用更全面的方法來處理錯誤,這可能包含電子郵件網域內單純重複以外的其他問題。
步驟 6:將使用者資料插入資料庫
將從使用者收集的資訊合併到資料庫中需要執行結構化查詢語言(SQL)語句。為了完成這項任務,人們可以在程式中使用 SQL 查詢。透過相應地調整 try-except 區塊,應用程式能夠成功地將使用者的詳細資訊儲存在資料庫中。
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-except 語句中,遊標執行 SQL 插入操作。隨後,conn.commit
方法開始對資料庫進行SQL操作。
如果您執行了上述所有步驟,您應該擁有一個可以註冊使用者並將其儲存到資料庫的應用程式。您可以使用 DB Browser for SQLite 等應用程式來查看資料庫的內容:
使用資料庫而不是集合類型
對於具有相對簡單的資料結構的小型應用程序,建立自訂 SQL 查詢或利用輕量級物件關係映射 (ORM) 庫(例如 SQLAlchemy)可能是一種實用的方法。儘管如此,當開發資料關係變得越來越複雜的更大、更複雜的系統時,利用像 Django 的 ORM 這樣的既定框架可以在效率、可維護性和可擴展性方面提供顯著的優勢。
為了進一步提高您對低階資料庫操作的熟練程度,請考慮實施登入機制來補充現有的使用者註冊流程。