062. 编写一个函数,实现简单的数据库连接和操作
在 Python 中,可以使用多种数据库连接库来实现与不同数据库的连接和操作。以下是一个通用的示例,展示如何编写一个简单的函数来连接数据库并执行基本操作(如查询和插入)。
示例 1:使用 SQLite
SQLite 是一个轻量级的嵌入式数据库,适合小型项目或测试用途。Python 自带了 sqlite3
模块,可以直接使用。
示例代码
import sqlite3
def sqlite_db_operations(db_path, query, params=None):
"""
执行 SQLite 数据库操作
:param db_path: 数据库文件路径
:param query: SQL 查询语句
:param params: 查询参数(可选),用于防止 SQL 注入
:return: 查询结果(如果是 SELECT 查询)
"""
try:
# 连接到 SQLite 数据库
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
# 执行 SQL 查询
if params:
cursor.execute(query, params)
else:
cursor.execute(query)
# 如果是 SELECT 查询,返回结果
if query.strip().upper().startswith("SELECT"):
result = cursor.fetchall()
return result
else:
# 对于其他操作(如 INSERT、UPDATE、DELETE),提交事务
conn.commit()
return cursor.rowcount # 返回影响的行数
except sqlite3.Error as e:
print(f"数据库操作失败:{e}")
return None
finally:
# 关闭连接
if conn:
conn.close()
# 示例用法
if __name__ == "__main__":
db_path = "example.db" # 数据库文件路径
# 创建表
create_table_query = """
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER NOT NULL
)
"""
sqlite_db_operations(db_path, create_table_query)
# 插入数据
insert_query = "INSERT INTO users (name, age) VALUES (?, ?)"
insert_params = ("Alice", 30)
sqlite_db_operations(db_path, insert_query, insert_params)
# 查询数据
select_query = "SELECT * FROM users"
result = sqlite_db_operations(db_path, select_query)
print("查询结果:", result)
示例 2:使用 MySQL
MySQL 是一个广泛使用的开源关系型数据库。Python 可以通过 mysql-connector-python
或 pymysql
等库来连接 MySQL 数据库。这里我们使用 mysql-connector-python
。
示例代码
import mysql.connector
def mysql_db_operations(config, query, params=None):
"""
执行 MySQL 数据库操作
:param config: 数据库连接配置
:param query: SQL 查询语句
:param params: 查询参数(可选),用于防止 SQL 注入
:return: 查询结果(如果是 SELECT 查询)
"""
try:
# 连接到 MySQL 数据库
conn = mysql.connector.connect(**config)
cursor = conn.cursor()
# 执行 SQL 查询
if params:
cursor.execute(query, params)
else:
cursor.execute(query)
# 如果是 SELECT 查询,返回结果
if query.strip().upper().startswith("SELECT"):
result = cursor.fetchall()
return result
else:
# 对于其他操作(如 INSERT、UPDATE、DELETE),提交事务
conn.commit()
return cursor.rowcount # 返回影响的行数
except mysql.connector.Error as e:
print(f"数据库操作失败:{e}")
return None
finally:
# 关闭连接
if conn:
conn.close()
# 示例用法
if __name__ == "__main__":
# 数据库连接配置
config = {
"host": "localhost",
"user": "root",
"password": "password",
"database": "example_db"
}
# 创建表
create_table_query = """
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INT NOT NULL
)
"""
mysql_db_operations(config, create_table_query)
# 插入数据
insert_query = "INSERT INTO users (name, age) VALUES (%s, %s)"
insert_params = ("Alice", 30)
mysql_db_operations(config, insert_query, insert_params)
# 查询数据
select_query = "SELECT * FROM users"
result = mysql_db_operations(config, select_query)
print("查询结果:", result)
代码说明
连接数据库:
-
对于 SQLite,使用
sqlite3.connect()
连接到数据库文件。 -
对于 MySQL,使用
mysql.connector.connect()
连接到数据库服务器。
执行 SQL 查询:
-
使用
cursor.execute()
执行 SQL 查询。 -
如果查询需要参数(如插入数据时),可以将参数作为第二个参数传入,以防止 SQL 注入。
处理查询结果:
-
如果是
SELECT
查询,使用cursor.fetchall()
获取查询结果。 -
如果是
INSERT
、UPDATE
或DELETE
查询,提交事务并返回影响的行数。
异常处理:捕获数据库操作中可能出现的异常,并打印错误信息。
关闭连接:在 finally
块中关闭数据库连接,确保资源被正确释放。
注意事项
安装依赖库:如果使用 MySQL,需要安装 mysql-connector-python
库:
pip install mysql-connector-python
数据库配置:根据你的数据库服务器配置,修改 config
字典中的 host
、user
、password
和 database
参数。
安全性:在实际应用中,建议不要在代码中直接写明数据库密码,可以使用环境变量或配置文件来存储敏感信息。
事务处理:对于修改数据的操作(如 INSERT
、UPDATE
、DELETE
),需要调用 conn.commit()
提交事务。
视频讲解
BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)