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数据库?
uns = f[::2]
pwds = f[1::2]
for index in range(len(uns)):
process(uns[index].strip(), pwds[index].strip())
核心思路: 用 open() 读文件,用 mysql-connector-python 或 pymysql 库连数据库,然后执行 SQL。
具体步骤和代码示例:
-
安装驱动:选一个你喜欢的 MySQL 驱动。
pip install mysql-connector-python # 或者 pip install pymysql -
完整代码示例(以
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,记得提交和关闭连接。
感谢大佬赐教 , 完美解决.
能请教一下我的问题在哪吗?
应该是没有去掉行尾的换行
难怪之前我在调试的时候看到有换行符,但是一直没想到是这个问题.
感谢 , 明白了.

