人生若只如初见

WXY

使用Python从Word文档读取表格数据并更新到数据库

2023-12-27

引言

在日常工作中,我们经常遇到需要从各种文档中提取数据并更新到数据库的情况。这篇博客将展示如何使用Python来自动化这个过程,具体来说,是从一个Microsoft Word文档中读取数据,并将这些数据更新到MySQL数据库中

使用场景

假设我们有一个Word文档,里面包含了多个用户的用户名和密码,我们需要将这些信息更新到MySQL数据库中。这种情况在实际工作中可能会遇到,例如在用户迁移或批量更新凭据的情境下。

工具和库

  • Python:我们的脚本语言。

  • python-docx:用于读取Word文档的Python库。

  • MySQL Connector/Python:用于连接MySQL数据库的Python库

步骤概述

  1. 安装必要的库:确保安装python-docxmysql-connector-python库。

  2. 读取Word文档:使用python-docx库从Word文档中读取用户名和密码。

  3. 连接MySQL数据库:使用mysql.connector连接到MySQL数据库。

  4. 更新数据库:对于文档中的每个用户,使用其用户名找到对应的数据库记录,并更新密码。

代码实现

安装依赖库

pip install python-docx mysql-connector-python

Python脚本示例

from docx import Document
import mysql.connector

def update_passwords(doc_path, db_config):
    try:
        con = mysql.connector.connect(**db_config)
        cursor = con.cursor()
        doc = Document(doc_path)

        tables = doc.tables
        table = tables[0]

        for i in range(1, len(table.rows)):
            username = table.cell(i, 2).text
            new_password = table.cell(i, 3).text

            update_query = "UPDATE table_name SET password = %s WHERE username = %s"
            cursor.execute(update_query, (new_password, username))
            print(f"Updated password for username: {username}")

        con.commit()

    except mysql.connector.Error as err:
        print("Database error: ", err)
    finally:
        if con.is_connected():
            cursor.close()
            con.close()

# 配置和文档路径
db_config = {
    "host": "your_db_host",
    "port": 3306,
    "database": "your_db_name",
    "user": "your_username",
    "passwd": "your_password",
    "charset": 'utf8'
}
doc_path = 'your_doc_path.docx'

update_passwords(doc_path, db_config)

docx文件示例

2023-12-27-ayysoreu.png

demo.docx

注意事项

  • 数据安全和隐私:处理用户名和密码时,要特别注意数据安全和隐私。

  • 错误处理:合理处理可能出现的异常,如数据库连接失败等。

  • 测试:在生产环境中应用之前,先在测试环境中验证脚本的正确性。

遇到的问题

当sql只有一个参数时

cursor.execute() 方法时报错 `Database error: Could not process parameters: str(tb001), it must be of type list, tuple or dict`

这个错误信息表明在执行查询时传递了错误类型的参数给cursor.execute方法。在MySQL Connector/Python中,当您的SQL语句需要参数时,这些参数应该以列表、元组或字典的形式传递。如果您只有一个参数,即使是单个值,它也应该作为一个元组或列表传递。

需要以如下方式传递参数:

  • 作为一个元组:cursor.execute(query, (param_value,))

  • 或作为一个列表:cursor.execute(query, [param_value])

结语

通过Python自动化处理常见的数据迁移和更新任务,不仅可以节省大量时间,还能减少人为错误。希望这篇文章能帮助你理解这一过程,并在你的工作中派上用场。