1. 概述
本案例展示了如何从文本文件和JSON文件中读取销售数据,并将这些数据导入到MySQL数据库中。
2. 代码分析
- 首先,代码从
file_define_mysql
模块导入TextFileReader
和JsonFileReader
类,用于读取文本和JSON格式的文件。 - 接着,从
data_define_mysql
模块导入Record
类,该类用于封装每条销售记录。 - 使用
TextFileReader
和JsonFileReader
读取文件数据,并将得到的记录列表合并为一个列表all_data
。 - 然后,使用
pymysql
库建立与MySQL数据库的连接,并创建游标对象。 - 选择数据库
py_sql
,并对all_data
中的每条记录构造插入语句,执行插入操作,将数据写入orders
表。 - 最后,关闭数据库连接。
3. 关键点
- 文件读取:使用
TextFileReader
和JsonFileReader
读取不同格式的文件数据。 - 数据封装:使用
Record
类封装每条记录,方便后续处理。 - 数据库连接:使用
pymysql.Connection
创建数据库连接对象。 - 数据插入:构造SQL插入语句,使用游标执行,将数据导入数据库。
4. 扩展应用
- 批量插入:考虑使用批量插入以提高数据导入效率。
- 事务处理:在执行多条插入语句时,使用事务可以保证数据的一致性。
- 异常处理:增加异常处理机制,确保在文件读取或数据库操作失败时能够给出提示并进行适当的处理。
5. 代码示例扩展
以下是一些代码的扩展示例:
from pymysql import Connection, Error
try:
# 构建MySQL连接
conn = Connection(
host="localhost",
port=3306,
user="root",
password="123456",
autocommit=False # 关闭自动提交,使用事务
)
cursor = conn.cursor()
# 选择数据库
conn.select_db("py_sql")
# 读取文件数据并合并
# ... 省略文件读取代码 ...
# 执行批量插入
for record in all_data:
sql = f"insert into orders(order_date, order_id, money, province) " \
f"values(%s, %s, %s, %s)"
cursor.execute(sql, (record.date, record.order_id, record.money, record.province))
# 提交事务
conn.commit()
except Error as e:
print("数据库操作失败:", e)
conn.rollback() # 发生错误时回滚事务
finally:
# 确保游标和连接被正确关闭
if conn:
conn.close()
6. 编程规范
- 事务管理:在进行数据库写入操作时,使用事务可以提高数据安全性。
- 参数化查询:使用参数化查询可以防止SQL注入攻击。
- 异常处理:使用
try...except...finally
结构确保资源正确释放,并对异常进行处理。
通过这些示例和扩展,可以更深入地理解如何将文件数据导入到数据库,并学习到一些提高数据库操作安全性和效率的方法。