连接MySQL数据库
在操作MySQL数据库之前,首先需要建立与数据库的连接,常用的编程语言如Python、Java、PHP等都提供了相应的MySQL连接库,以Python为例,可以使用mysql-connector-python库进行连接,安装该库后,通过以下代码实现连接:
import mysql.connector
# 建立连接
conn = mysql.connector.connect(
host="localhost", # 数据库主机地址
user="your_username", # 数据库用户名
password="your_password", # 数据库密码
database="your_database" # 数据库名称
)
# 检查连接是否成功
if conn.is_connected():
print("成功连接到MySQL数据库")
else:
print("连接失败") 连接参数需根据实际配置调整,包括主机地址、用户名、密码和数据库名称,确保数据库服务已启动,且用户具备相应权限。
执行SQL查询
连接成功后,可以执行SQL查询语句,使用游标(Cursor)对象来执行SQL并获取结果,以下示例演示如何查询数据:
# 创建游标对象
cursor = conn.cursor()
# 执行查询语句
query = "SELECT * FROM users WHERE age > 20"
cursor.execute(query)
# 获取查询结果
results = cursor.fetchall()
# 打印结果
for row in results:
print(row)
# 关闭游标
cursor.close() fetchall()方法用于获取所有查询结果,若只需单行数据,可使用fetchone(),查询语句需符合SQL语法,并根据需求调整条件或表名。
插入、更新和删除数据
除了查询,还可以执行插入、更新和删除操作,这些操作通常使用execute()方法执行SQL语句,并通过commit()提交事务以确保数据持久化。
插入数据
cursor = conn.cursor()
# 插入单条数据
insert_query = "INSERT INTO users (name, age, email) VALUES (%s, %s, %s)"
user_data = ("Alice", 25, "alice@example.com")
cursor.execute(insert_query, user_data)
# 插入多条数据
users_data = [
("Bob", 30, "bob@example.com"),
("Charlie", 22, "charlie@example.com")
]
cursor.executemany(insert_query, users_data)
# 提交事务
conn.commit()
print(f"已插入 {cursor.rowcount} 条数据")
cursor.close() 更新数据
cursor = conn.cursor()
update_query = "UPDATE users SET age = %s WHERE name = %s"
cursor.execute(update_query, (26, "Alice"))
conn.commit()
print(f"已更新 {cursor.rowcount} 条数据")
cursor.close() 删除数据
cursor = conn.cursor()
delete_query = "DELETE FROM users WHERE name = %s"
cursor.execute(delete_query, ("Bob",))
conn.commit()
print(f"已删除 {cursor.rowcount} 条数据")
cursor.close() 执行修改操作后务必调用commit(),否则更改不会保存到数据库。
处理事务
事务是数据库操作的重要概念,确保一组操作要么全部成功,要么全部失败,使用commit()提交事务,rollback()回滚事务。
try:
cursor = conn.cursor()
# 开始事务
conn.start_transaction()
# 执行多个操作
cursor.execute("UPDATE accounts SET balance = balance - 100 WHERE id = 1")
cursor.execute("UPDATE accounts SET balance = balance + 100 WHERE id = 2")
# 提交事务
conn.commit()
print("事务提交成功")
except Exception as e:
# 发生错误时回滚
conn.rollback()
print(f"事务回滚: {e}")
finally:
cursor.close() 事务处理能保证数据一致性,尤其在金融或关键业务场景中尤为重要。
关闭连接
操作完成后,需关闭游标和连接以释放资源。
cursor.close()
conn.close()
print("连接已关闭") 未关闭的连接可能导致资源泄漏,影响数据库性能。
FAQs
Q1: 如何处理MySQL连接中的“Access denied”错误?
A1: 该错误通常是由于用户名、密码错误或权限不足导致,请检查:
- 确认用户名和密码是否正确;
- 确保用户对目标数据库有操作权限(如GRANT权限);
- 检查主机地址是否正确(如是否允许远程连接)。
Q2: 如何防止SQL注入攻击?
A2: SQL注入是通过恶意输入破坏SQL语句的攻击方式,防范措施包括:
- 使用参数化查询(如示例中的
%s占位符),避免直接拼接SQL字符串; - 对用户输入进行验证和过滤;
- 限制数据库用户的权限,遵循最小权限原则。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复