python边写边学习——简单的svn同步

python边写边学习——简单的svn同步(一)

学python有一小段时间了,但是没有实际项目练手,仅从一些脚本开始比较的吃力。最近需要运维一些服务器,正好使用python来练手,也回顾一下相关知识。

首先python的项目作用是,博主有10台负载服务器,那么同步代码的时候异常的心塞。(暂时使用的是SVN还没有切换到gitlab)有试过相关的开源软件,如walle,讲真还是挺不错的就是博主玩的时候很心塞,3~5台服务器的代码更新还行,多了就各种bug出来了(可能是我用法不对= =。)而且博主也没有需要使用回滚、分线下预发等功能,所以想想还是自己写一个。

首先是python连接数据库。讲真使用python不大习惯,因为python查询的数据基本上都是没有栏名称的,要得到某个列的数据需要使用下标获取,感觉有点坑。或许有相应方法我没有找到,这里暂时记录下相关实例类。后续更新和维护以达成比较好的数据结构直接使用.

先贴上目录结构:
目录结构

  • 知识点一,__init__.py
    当你将一个包作为模块导入(比如从 xml 导入 dom )的时候,实际上导入了它的 init.py 文件。一个包是一个带有特殊文件 _init_.py 的目录。__init__.py 文件定义了包的属性和方法。其实它可以什么也不定义;可以只是一个空文件,但是必须存在。如果 __init__.py 不存在,这个目录就仅仅是一个目录,而不是一个包,它就不能被导入或者包含其它的模块和嵌套包。__init__.py 文件会在导入时被执行。所以初学者like me,在调用不同文件层次的不同文件时候,需要在每个文件夹下创建__init__.py文件

  • 知识点二 __init__方法和__new__方法
    __new__方法接受的参数虽然也是和__init__一样,但__init__是在类实例创建之后调用,而 __new__方法正是创建这个类实例的方法。__new__方法还涉及到metaclass的关联,这个下篇博客单独研究。

其中dal为数据库操作相关文件,send为触发脚本;tornado_web为tornado框架,即使用web框架监听和接收相关指令。附上tornado的web框架链接:
http://www.cnblogs.com/kongqi816-boke/p/5699866.html 这里不重点研究。

首先贴下python操作实例,这里使用的pymysql,很简单的安装方式,直接pip install pymysql即可。这里使用的python2语法。

# -*- coding: utf-8 -*-
import mysqlConfig
import pymysql

class mysqlConnect:
    connectInstance = None
    cursorInstance = None

    '''设置实例'''
    def set_db_instance(self):
        self.connectInstance = pymysql.connect(
            host=mysqlConfig.hostname, port=mysqlConfig.port, user=mysqlConfig.username, password=mysqlConfig.password,
            db=mysqlConfig.database
        )
        self.cursorInstance = self.connectInstance.cursor()

    '''获取connect实例'''
    def get_db_instance(self):
        if self.connectInstance is None:
            self.set_db_instance()
        return self.connectInstance

    '''获取cursor实例'''
    def get_cursor_instance(self):
        if self.connectInstance is None:
            self.get_db_instance()
        return self.cursorInstance

    def __del__(self):
        if self.connectInstance is not None:
            self.connectInstance.close()
        if self.cursorInstance is not None:
            self.cursorInstance.close()

以上有个知识点没有特别明白,即类的private和public属性。理想方式是仅有一个出口,想把除了获取实例的两个方法外其他方法和属性都设置为private属性。

外部调用类:


import mysqldb
import time

mysqldb = mysqldb.mysqlConnect()
connect = mysqldb.get_db_instance()
cursor = mysqldb.get_cursor_instance()

'''插入数据库
@property taskId 任务Id
@property host  主机IP
@property info  记录消息
@property status 状态
'''
def insertRecord(taskId,host,info,status):
    timeStamp = time.time()
    sql = "insert into record(task_id,host,info,status,ctime) VALUES (%d,'%s','%s',%d,%d)"%(taskId,host,info,status,timeStamp)
    cursor.execute(sql)
    connect.commit()

这里mark一下点,connect需要手动commit,好像有个设置可以自动提交。

接下来是配置类:


hostname = '127.0.0.1'  #数据库host
port = 3306  #数据库端口
database = 'svn_update' #数据库
username = 'root' #账号
password = ''   #密码

projectPath = '/data/www/test' #项目路径
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值