DeepSeek 为我赋能 Python 编程能力
背景
随着业务数据的不断增涨,导致存储空间不足及查询效率的问题不断出现,于是做了个生产数据裁剪的项目并通过shell 脚本实现了每月自动化裁剪。目前已经正常运行近3年左右。最近因裁剪的表不断增加,导致原来的shell 脚本无法满足近期的自动化任务。因此计划用Python语言重写脚本,同时对一些步骤进行优化,正好锻炼一下自己Python的编程能力。
裁剪项目逻辑处理流程分4步:
- 1、Oracle Expdp 命令将裁剪分区导出;
- 2、通过scp、rsync命令将dmp文件传输到历史库服务器;
- 3、Oracle Impdp 命令将裁剪数据导入历史库;
- 4、使用truncate partition 将裁剪分区数据进行清除;
因自己的Python代码能力一般,在处理传输expdp 导出的dmp文件时,技术卡壳了。
技术卡壳:
规划通过A服务器作为管理端,对B服务器的生产数据库进行Expdp ,然后将B服务器产生的DMP文件传输到C服务器中的历史库中。
目前的技术卡点:如何从A服务器命令调用B服务器往C服务器传输dmp文件,因为需要输入用户名和密码。由于自己的Pyhon代码能力还是很欠缺,只能翻网页找解决方案,千篇一律,各种复制粘贴。最近deepseek 比较火,尝试问一下,看看能不能解决自己的问题。
需求
“帮我下一段python代码,实现 从A服务器,连接到B服务器,然后把B服务器的文件直接传输到C服务器,仅传输一次,不通过A服务器中转,考虑安全性不使用免密,考虑大文件上10GB左右”
Deepseek
提出需求
分析过程结合很全面,确实前面刚提过使用expect 命令
代码方案:
代码如下,直观评价代码比我写的规范,然后结合上面的分析过程很容易理解代码
import paramiko
import logging
import os
from tempfile import mkstemp
# 配置日志
logging.basicConfig()
logger = logging.getLogger("SecureTransfer")
logger.setLevel(logging.INFO)
def secure_transfer(b_host, b_user, b_password,
c_host, c_user, c_password,
source_path, dest_path,
port=22):
"""
安全传输流程:
1. A服务器连接B服务器(使用密码认证)
2. 在B服务器创建临时安全目录
3. 通过加密通道传输C服务器密码到B服务器
4. 在B服务器使用sshpass+rsync传输文件
5. 清理B服务器上的临时凭证
"""
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
sftp = None
try:
# 连接B服务器
logger.info(f"🔑 Connecting to B server {
b_host}...")
ssh.connect