Python 在其标准库中内置了出色的数据库支持,因此您可以创建数据库并与数据库交互,而无需依赖 Django ORM 等外部框架。
SQLite 是轻量级的并且易于与 Python 集成。 通过简单的用户注册应用程序了解 Python 数据库编程的基本原理。
目录
如何用 Python 创建数据库
要在 Python 中创建数据库并与之交互,您需要两个主要东西:连接和游标。
连接可帮助您连接到现有数据库或创建新数据库。 以下是如何在 Python 中使用 SQLite 创建数据库连接:
import sqlite3
conn = sqlite3.connect('path/to/database.db')
conn.close()
connect() 方法获取现有数据库的路径。 如果指定路径没有数据库,则会创建一个。 完成与数据库的交互后,应该关闭数据库连接。
游标可帮助您与连接的数据库进行交互。 您将使用游标在 Python 程序中执行 SQL 查询。 创建光标的方法如下:
cursor = conn.cursor()
cursor.close()
您可以通过在打开的连接对象上调用cursor()方法来创建游标。
如何在 Python 中执行数据库事务
使用游标,您可以运行 SQL 语句、查询或脚本来读取或写入数据,或更改数据库结构。
您可以使用三种主要方法来执行数据库事务。
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
name TEXT,
age INTEGER
)
""")
此代码调用游标上的执行方法,并向其传递一个包含 SQL 语句的字符串。
data = [
('Alice', 25),
('Bob', 30),
('Charlie', 22)
]cursor.executemany("""INSERT INTO users (name, age) VALUES (?, ?)""", data)
上面的代码使用executemany方法多次向数据库插入值。
注意? SQL 语句中的占位符。 executemany 方法会将这些替换为每个对象的相应值。
with open("path/to/script.sql") as file:
sql_script = file.read()cursor.executescript(sql_script)
如何使用 Python 和 SQLite3 构建注册应用程序
注册应用程序背后的逻辑涉及使用 Python 获取用户信息并将其存储在数据库中。 这些步骤将向您展示如何使用 Python 和 SQLite3 创建一个简单的注册系统。
第 1 步:连接到现有数据库或创建新数据库
首先为您的应用程序创建一个数据库或连接到现有数据库:
import sqlite3conn = sqlite3.connect('database.db')
cursor = conn.cursor()
cursor.close()
conn.close()
上面的代码创建一个连接对象和一个游标来与连接的数据库进行交互。
第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方法,则可以在SQL文件末尾添加COMMIT关键字,这样就不必调用conn.commit。
第三步:收集用户数据
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函数,保证用户两次输入相同的密码。 如果他们不这样做,您应该提示他们重新输入密码。 您可以通过这样的循环来实现:
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: ")
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: ")
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,则 while 循环将继续,提示用户输入不同的电子邮件地址。
对于此示例应用程序,可以安全地假设 IntegrityError 只会因重复的电子邮件地址而发生。 在真实的应用程序中,您可能会使用更高级的错误处理来解决可能发生的其他问题。
第6步:将用户数据插入数据库
现在您已经收集并验证了用户的数据,是时候将其添加到数据库中了。 您可以使用 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操作提交到数据库。
如果您执行了上述所有步骤,您应该拥有一个可以注册用户并将其保存到数据库的应用程序。 您可以使用类似的应用程序 SQLite 数据库浏览器 查看数据库的内容:
使用数据库而不是集合类型
对于简单的数据库,您可能会发现编写自己的代码更容易。 但是,随着应用程序的增长和数据库变得更加复杂,请考虑使用 Django ORM 等工具来简化任务。
要继续练习低级数据库技能,请尝试实现登录系统来补充注册程序。