Python学习 第9天 连接FTP和数据库

公司项目刚好有个小需求,要遍历FTP文件夹下的图片,并写进数据库,非常适合练手

从网上找了一段代码,改造了一下

中文是个大坑

#encoding=utf-8
from ftplib import FTP
import os, sys, string, datetime, time, socket, pymssql
reload(sys)
sys.setdefaultencoding(‘utf8‘)

class MYFTP:
    def __init__(self, hostaddr, username, password, remotedir, port=21):
        self.hostaddr = hostaddr
        self.username = username
        self.password = password
        self.remotedir = remotedir
        self.port = port
        self.ftp = FTP()
        self.file_list = []
    def __del__(self):
        self.ftp.close()
    def login(self):
        ftp = self.ftp
        timeout = 300
        socket.setdefaulttimeout(timeout)
        ftp.set_pasv(True)
        ftp.connect(self.hostaddr, self.port)
        ftp.login(self.username, self.password)
        print u‘成功登录到 %s‘ % (self.hostaddr)
        ftp.cwd(self.remotedir)

    def list_files(self, picId, remotedir=‘./‘):
        self.ftp.cwd(remotedir)
        print(u‘正在处理目录 %s‘ % self.ftp.pwd())
        self.file_list = []
        self.ftp.dir(self.get_file_list)
        for item in self.file_list:
            sql_str.append(‘‘‘
            INSERT INTO CaseArchive ( OrderID, CaseID, DocCaseID, EvidenceName, Amount, Page, TotalPage, FilePath, FileName)
            VALUES (‘%s‘, ‘‘, ‘‘, ‘%s‘, ‘1‘, ‘1‘, ‘1‘, ‘%s‘, ‘%s‘);
            ‘‘‘ % (self.file_list.index(item) + 1, item[1].split(‘.‘)[0], remotedir.encode("UTF-8"), item[1]))
        sql_str.append("DELETE FROM CaseArchive WHERE PicID = ‘%s‘;" % picId)

    def get_file_list(self, line):
        ret_arr = []
        file_arr = self.get_filename(line)
        if file_arr[1] not in [‘.‘, ‘..‘]:
            self.file_list.append(file_arr)

    def get_filename(self, line):
        pos = line.rfind(‘:‘)
        while(line[pos] != ‘ ‘):
            pos += 1
        while(line[pos] == ‘ ‘):
            pos += 1
        while(line[pos] != ‘ ‘):
            pos += 1
        while(line[pos] == ‘ ‘):
            pos += 1
        file_arr = [line[0], line[pos:]]
        return file_arr

if __name__ == ‘__main__‘:
    conn = pymssql.connect(host=‘‘,user=‘‘,password=‘‘,database=‘‘,charset=‘utf8‘)
    cur = conn.cursor()
    #先获取FTP配置
    cur.execute("SELECT ParamValue FROM ParamConfig WHERE ParamName = ‘FTP地址‘;")
    hostaddr = cur.fetchone()[0] # ftp地址
    cur.execute("SELECT ParamValue FROM ParamConfig WHERE ParamName = ‘FTP用户名‘;")
    username = cur.fetchone()[0] # 用户名
    cur.execute("SELECT ParamValue FROM ParamConfig WHERE ParamName = ‘FTP密码‘;")
    password = cur.fetchone()[0] # 密码
    cur.execute("SELECT ParamValue FROM ParamConfig WHERE ParamName = ‘FTP端口‘;")
    port = cur.fetchone()[0] # 端口号

    #连接FTP
    rootdir_remote = ‘‘ # 远程目录
    f = MYFTP(hostaddr, username, password, rootdir_remote, port)
    f.login()

    sql_str = []
    cur.execute("SELECT PicID, FilePath FROM CaseArchive WHERE Remark = ‘仅目录‘ GROUP BY FilePath;")
    rows = cur.fetchall()
    for row in rows:
        f.list_files(row[0], row[1])

    #拼好的字符串一次性执行,如果update/delete/insert记得要conn.commit(),否则数据库事务无法提交
    cur.execute (‘‘.join(sql_str))
    conn.commit()

    #关闭数据库连接
    cur.close()
    conn.close()

还在调试中

时间: 2024-10-11 07:45:11

Python学习 第9天 连接FTP和数据库的相关文章

python学习笔记(九):操作数据库

我们在写代码的时候,经常会操作数据库,增删改查,数据库有很多类型,关系型数据库和非关系数据库,这里咱们介绍一下python怎么操作mysql.redis和mongodb. 一.python操作mysql数据库 python3中操作mysql数据需要安装一个第三方模块,pymysql,使用pip install pymysql安装即可,在python2中是MySQLdb模块,在python3中没有MySQLdb模块了,所以使用pymysql. import pymysql # 创建连接,指定数据库

python学习之 -mysql 连接和db_config配置

最近学习python,记录下自己写学习python的代码和心得,自己写了一个使用python mysql 的查询语句和做的一个db_config.py 配置信息. 1.db_config.py 配置文件 1 #/usr/bin/python 2 3 class mysql_config(): 4 '''def __init__(self,name): 5 #print 'aaaa' 6 self.name = name 7 print name 8 ''' 9 def get_config(se

解决python fs(filesystem)库在连接FTP服务器时无法显示文件目录的问题

本文由Markdown语法编辑器编辑完成. 1. 问题提出: 目前有一个需求是:医院的影像数据是存储在FTP服务器上的,医院提供了连接该FTP服务器的host, user, password等参数.(注:该ftp服务是部署在windows操作系统的IIR服务上) 采用的python库是fs(filesystem2)的第三方库.fs==2.0.23版本. 在根据提供的参数,可以正常的连接到该ftp服务器,但是在显示该ftp服务器下的文件目录时,却显示为空.但是,该ftp服务器下的确是有文件夹的.

python学习道路(day9note)(socketserver编程,ftp)

1.ftp client 1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 4 5 import socket 6 import subprocess 7 8 user_data = { 9 'user':None, 10 } 11 12 user_status = False #用户验证,只是当用户可以链接的时候需要去验证一下用户密码 13 def login(): 14 count = 0 15 global user_status 16 whi

python学习笔记(十五) - python连接mysql数据库

一. 安装mysql驱动: 由于mysql服务器以独立的进程运行,并通过网络对外服务,所以,需要支持python的mysql驱动来连接mysql服务器. 安装驱动:easy_install mysql-connector-python 二. 连接数据库: 下面演示使用python代码连接mysql: #!/usr/bin/env python # -*- coding: utf-8 -*- # utility @ Python # 导入MySQL驱动: import mysql.connecto

Python学习笔记_02:使用Tkinter连接MySQL数据库实现登陆注册功能

1 环境搭建 1.1 Python安装 1.2 MySQL环境搭建 1.3安装MySQLdb  2 具体实现 2.1 登陆界面 2.2 注册界面 2.3 具体实现部分代码   1 环境搭建 1.1 Python安装 本文具体实现部分Python环境:Python2.7.14,64位版本 具体安装步骤见:Python 环境搭建 附:配置PythonIDE,推荐PyCharm(具体IDE界面见下图),下载点击运行即可使用 PyCharm 官方下载地址:http://www.jetbrains.com

Day3: Python学习笔记之计算机基础——网络片

Day3: Python学习笔记之计算机基础--网络片 什么是互联网协议以及为何要有互联网协议? ?互联网协议本质上是为了方便连接两台计算机而指定的一系列统一的标准. osi五层模型 计算机之间要实现数据传输必须要经过以下五层协议: ? 模型 ,协议 ,硬件 ? 应用层, http协议.用户自定义协议 ? 传输层, TCP/UPD协议 ,四层交换机.四层路由器 ? 网络层, IP协议, 三层交换机.路由器 ? 数据链路层, 以太网.电信号分组, 网桥.以太网交换机.网卡 ? 物理层, 传递电信号

Python学习记录-socket编程

Python学习记录-socket编程 学习 python socket Python学习记录-socket编程 1. OSI七层模型详解 2. Python socket 3. socket()函数 4. TCP socket通信流程 5. Python Internet 模块 1. OSI七层模型详解 以上图见:http://blog.csdn.net/yaopeng_2005/article/details/7064869 其它详情可参考:socket网络基础 2. Python sock

Python学习---网络编程 1217[all]

OSI七层模型: 物理层, 数据链路层, 网络层,传输层,会话层,表达层,应用层 应用层:TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等 传输层:TCP,UDP 网络层:IP,ICMP,OSPF,EIGRP,IGMP 数据链路层:SLIP,CSLIP,PPP,MTU [图片来自网络] 网络通信要素: A:IP地址    (1) 用来标识网络上一台独立的主机 (2) IP地址 = 网络地址 + 主机地址(网络号:用于识别主机所在的网络/网段.主机号:用于识别该网络中的主