Python中读取文件内容后如何操作MySQL数据库?

内部有个管理服务器信息 , FTP 信息的页面 , 因为老板要求每半个月更新一次密码 , 所以自己写了 shell 脚本定期换 vsFTPD 的密码.

但是页面上的密码也要更新 , 我想通过 Python 解决这个问题(不想挨个改哇) . - -!

先上代码

import pymysql

刷新 vsFTPD 密码

db_connect = pymysql.connect(host=‘192.168.0.xxx’, port=3306, user=‘root’, passwd=‘123456’, db=‘mima’,charset=“utf8”) request = db_connect.cursor()

def process(username,password): if username: request.execute(“SELECT * FROM ftp_list WHERE username=’%s’” % (username)) result = request.fetchall() if result: request.execute(“UPDATE ftp_list SET password=’%s’ WHERE username=’%s’” % (password,username)) print (“用户”+username+“的密码已经更新!”) else: print (“没找到”+username+“这个用户!”) else: print (“缺少参数!”)

u = “sara”

p = “123456”

process(u,p)

f = open(‘1.txt’,‘r’).readlines()

while f: lines = f[:2] f = f[2:] user=str(lines[0]) pwd=str(lines[1]) process(user,pwd)

那个 1.txt 的格式是:

sara
123456
lily
123456

第一行是用户名, 第二行是密码.

问题是 , 按照目前的代码 , 运行的结果总是提示找不到 xxx 这个用户.

然而我注释掉从文件中读取帐号密码的这一段 , 直接赋值并用 process() 来处理则正常.

比较小白 , Google 了半天也没什么头绪 , 跑来请教各位大佬了... 感谢.


Python中读取文件内容后如何操作MySQL数据库?

5 回复

uns = f[::2]
pwds = f[1::2]
for index in range(len(uns)):
process(uns[index].strip(), pwds[index].strip())


核心思路:open() 读文件,用 mysql-connector-pythonpymysql 库连数据库,然后执行 SQL。

具体步骤和代码示例:

  1. 安装驱动:选一个你喜欢的 MySQL 驱动。

    pip install mysql-connector-python
    # 或者
    pip install pymysql
    
  2. 完整代码示例(以 mysql-connector-python 为例,假设文件每行是一条记录,要插入 users 表):

    import mysql.connector
    from mysql.connector import Error
    
    def process_file_to_db(file_path, host, user, password, database):
        """读取文件内容并插入到MySQL数据库"""
        connection = None
        cursor = None
        
        try:
            # 1. 读取文件
            with open(file_path, 'r', encoding='utf-8') as file:
                lines = file.readlines()
            
            # 2. 连接数据库
            connection = mysql.connector.connect(
                host=host,
                user=user,
                password=password,
                database=database
            )
            
            if connection.is_connected():
                cursor = connection.cursor()
                
                # 3. 处理每行数据并插入
                for line in lines:
                    # 假设每行格式是 "name,age,email"
                    data = line.strip().split(',')
                    if len(data) == 3:
                        sql = "INSERT INTO users (name, age, email) VALUES (%s, %s, %s)"
                        cursor.execute(sql, data)
                
                # 4. 提交事务
                connection.commit()
                print(f"成功插入 {cursor.rowcount} 条记录")
                
        except Error as e:
            print(f"数据库错误: {e}")
            if connection:
                connection.rollback()
        except FileNotFoundError:
            print(f"文件 {file_path} 未找到")
        except Exception as e:
            print(f"其他错误: {e}")
        finally:
            # 5. 清理资源
            if cursor:
                cursor.close()
            if connection and connection.is_connected():
                connection.close()
    
    # 使用示例
    process_file_to_db(
        file_path='data.txt',
        host='localhost',
        user='your_username',
        password='your_password',
        database='your_database'
    )
    

关键点说明:

  • 文件读取:用 with open() 确保文件正确关闭,注意编码问题。
  • 数据库连接:连接参数根据你的 MySQL 配置调整。
  • 参数化查询:一定要用 %s 占位符和元组传参,防止 SQL 注入。
  • 事务管理:插入后要 commit(),出错时 rollback()
  • 资源清理:在 finally 块中关闭 cursor 和 connection。

如果文件格式复杂(比如 CSV、JSON):

  • CSV 文件:用 csv.reader() 替代 readlines()split(',')
  • JSON 文件:用 json.load() 读取,然后遍历列表插入。

一句话总结: 读文件拿数据,连数据库执行参数化 SQL,记得提交和关闭连接。


感谢大佬赐教 , 完美解决.
能请教一下我的问题在哪吗?

应该是没有去掉行尾的换行


难怪之前我在调试的时候看到有换行符,但是一直没想到是这个问题.
感谢 , 明白了.

回到顶部