Python读取ini文件、操作mysql、发送邮件实例


Posted in Python onJanuary 01, 2015

我是闲的没事干,2014过的太浮夸了,博客也没写几篇,哎~~~ 用这篇来记录即将逝去的2014

python对各种数据库的各种操作满大街都是,不过,我还是喜欢我这种风格的,涉及到其它操作,不过重点还是对数据库的操作。呵~~

Python操作Mysql

首先,我习惯将配置信息写到配置文件,这样修改时可以不用源代码,然后再写通用的函数供调用

新建一个配置文件,就命名为conf.ini,可以写各种配置信息,不过都指明节点(文件格式要求还是较严格的):

[app_info]

DATABASE=test

USER=app

PASSWORD=123456

HOST=172.17.1.1

PORT=3306
[mail]

host=smtp.163.com

mail_from=zhoujie0111@126.com

password=654321

send_to=zhoujie0111@139.com;zhoujie0111@163.com

同目录下新建文件db.py,精悍的代码如下,不解释:

# -*-coding:utf-8 -*-
import MySQLdb   #首先必须装这两个包

import ConfigParser
cf=ConfigParser.ConfigParser()

cf.read("conf.ini")
DATABASE=cf.get("app_info","DATABASE")

USER=cf.get("app_info","USER")

PASSWORD=cf.get("app_info","PASSWORD")

HOST=cf.get("app_info","HOST")

PORT=cf.get("app_info","PORT")
def mysql(sql):

    try:

        conn=MySQLdb.connect(host=HOST,user=USER,passwd=PASSWORD,db=DATABASE,port=PORT)

        cur = conn.cursor()

        cur.execute(sql)

        rows = cur.fetchall()

        conn.commit()  #这个对于增删改是必须的,否则事务没提交执行不成功

        cur.close()

        conn.close()

        return rows

    except MySQLdb.Error,e:

        print "Mysql Error %d: %s" % (e.args[0], e.args[1])

上面是封装了操作数据库的方法,只需提供一个sql语句,CRUD均可操作。下面来YY一些数据来测试下增删改查的具体用法(easy的,我真是闲),接着上面的代码写:

def operation():

    #查询

    select = mysql('select * from test')
    #插入

    '''

    插入这个地方有2点需要注意:

    1.插入某几列如下指定,插入全部可以不指定列,但必须后面插入的值要按顺序

    2.注意下面的type列两边有反斜点,这是因为type在我这个数据库里有个表也叫这个,或者可以把它叫关键字,不加反斜点插入会失败

    3.这没好说的,呵呵,数字占位符用%d,字符串用%s,且字符串占位符必须用双引号括起来

    '''

    insert = mysql('insert into test (name,number,`type`) values("%s",%d,"%s")'%('jzhou',100,'VIP'))
    #更新

    mysql('update test set number=%d where name="%s"'%(99,'jzhou'))
    #删除

    delete = mysql('delete from test where number = %d and `type`="%s"'%(100,'jzhou'))
    return select #我返回这个是为了下面发送邮件用的,顺便增加个发送邮件的功能

我只是想把这个简单的操作搞的复杂点,增加个发送邮件的功能,也是接着上面的代码:

mailto_list=[]

send_info=cf.get("mail","send_to")

send_array=send_info.split(";")

for i in range(len(send_array)):

    mailto_list.append(send_array[i])
mail_host=cf.get("mail","host")

mail_from=cf.get("mail","mail_from")

mail_password=cf.get("mail","password")
def send_mail(to_list,sub,content):

    me=mail_from

    msg=MIMEText(content,_subtype='html',_charset='utf-8')

    msg['Subject']=sub

    msg['From']=me

    msg['To']=";".join(to_list)

    try:

        s=smtplib.SMTP()

        s.connect(mail_host)

        s.login(mail_from,mail_password)

        s.sendmail(me,to_list,msg.as_string())

        s.close()

        return True

    except Exception,e:

        print str(e)

        return False

发送邮件的配置我也是写在conf.ini里的,在主函数里调用一下发送邮件来结束这个东西:

if __name__ == '__main__':

    sub = u'不要问我为什么写这篇博客,闲,就是任性!'

    content = operation()

    if send_mail(mailto_list,sub,content):

        print 'send success'

    else:

        print 'send failed'

其实我还想说一下python操作postgresql,跟mysql非常类似,下载包psycopg2,不太相同的就是postgresql中执行的sql语句都要加双引号,来感受一下:

# -*-coding:utf-8 -*-

import psycopg2

import ConfigParser
cf=ConfigParser.ConfigParser()

cf.read("conf.ini")
DATABASE=cf.get("cmdb_info","DATABASE")

USER=cf.get("cmdb_info","USER")

PASSWORD=cf.get("cmdb_info","PASSWORD")

HOST=cf.get("cmdb_info","HOST")

PORT=cf.get("cmdb_info","PORT")
def psql(sql):

    try:

        conn = psycopg2.connect(database=DATABASE, user=USER, password=PASSWORD, host=HOST, port=PORT)

        cur = conn.cursor()

        cur.execute(sql)

        rows = cur.fetchall()

        conn.commit()

        cur.close()

        conn.close()

        return rows

    except Exception,e:

        print e
def psql_oper():

    sql="select \"name\",\"type\" from \"test\" where \"name\" = 'jzhou'"

    rows=psql(sql)

    print rows

我总结了下,此博客虽简单,但包含三个重要的知识点,^_^

1、python读取ini文件(要import ConfigParser)
2、python操作mysql
3、python发送邮件

4、发表出来的都是经过实践检验的,即使很简单,这是一种态度!

Python 相关文章推荐
python字典序问题实例
Sep 26 Python
Python pickle模块用法实例分析
May 27 Python
python中import学习备忘笔记
Jan 24 Python
Python实现简单遗传算法(SGA)
Jan 29 Python
python逆序打印各位数字的方法
Jun 25 Python
详解Django中六个常用的自定义装饰器
Jul 04 Python
python 为什么说eval要慎用
Mar 26 Python
python Web flask 视图内容和模板实现代码
Aug 23 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
Oct 30 Python
8段用于数据清洗Python代码(小结)
Oct 31 Python
Django框架中间件定义与使用方法案例分析
Nov 28 Python
基于OpenCV的网络实时视频流传输的实现
Nov 15 Python
Python实现检测服务器是否可以ping通的2种方法
Jan 01 #Python
Python Web框架Flask信号机制(signals)介绍
Jan 01 #Python
Python模拟登录12306的方法
Dec 30 #Python
python执行shell获取硬件参数写入mysql的方法
Dec 29 #Python
简单的抓取淘宝图片的Python爬虫
Dec 25 #Python
简单使用Python自动生成文章
Dec 25 #Python
Python 抓取动态网页内容方案详解
Dec 25 #Python
You might like
PHP+AJAX实现无刷新注册(带用户名实时检测)
2007/01/02 PHP
PHP对接微信公众平台消息接口开发流程教程
2014/03/25 PHP
php恢复数组的key为数字序列的方法
2015/04/28 PHP
PHP类的自动加载机制实现方法分析
2019/01/10 PHP
JQuery 网站换肤功能实现代码
2009/11/02 Javascript
怎样在JavaScript里写一个swing把数据插入数据库
2012/12/10 Javascript
将字符串转换成gb2312或者utf-8编码的参数(js版)
2013/04/10 Javascript
JSON传递bool类型数据的处理方式介绍
2013/09/18 Javascript
js事件绑定快捷键以ctrl+k为例
2014/09/30 Javascript
angularJS 中$scope方法使用指南
2015/02/09 Javascript
JavaScript让Textarea支持tab按键的方法
2015/06/26 Javascript
JavaScript简单获取页面图片原始尺寸的方法
2016/06/21 Javascript
微信公众号 客服接口的开发实例详解
2016/09/28 Javascript
原生js实现淘宝购物车功能
2020/06/23 Javascript
vue 插值 v-once,v-text, v-html详解
2018/01/19 Javascript
微信小程序实现星级评分和展示
2018/07/05 Javascript
Vue 实时监听窗口变化 windowresize的两种方法
2018/11/06 Javascript
Vue + Elementui实现多标签页共存的方法
2019/06/12 Javascript
微信小程序实现打开并下载服务器上面的pdf文件到手机
2019/09/20 Javascript
分享一下Python 开发者节省时间的10个方法
2015/10/02 Python
matplotlib作图添加表格实例代码
2018/01/23 Python
Python中pandas模块DataFrame创建方法示例
2018/06/20 Python
python 动态生成变量名以及动态获取变量的变量名方法
2019/01/20 Python
在Python 字典中一键对应多个值的实例
2019/02/03 Python
Django为窗体加上防机器人的验证码功能过程解析
2019/08/14 Python
python groupby 函数 as_index详解
2019/12/16 Python
python 列表、字典和集合的添加和删除操作
2019/12/16 Python
python脚本监控logstash进程并邮件告警实例
2020/04/28 Python
致垒球运动员加油稿
2014/02/16 职场文书
社团2014年植树节活动总结
2014/03/11 职场文书
公积金贷款承诺书
2015/04/30 职场文书
大学生活委员竞选稿
2015/11/21 职场文书
2016大一新生军训心得体会
2016/01/11 职场文书
励志语录:只有自己足够强大,才能不被别人践踏
2020/01/09 职场文书
python如何利用cv2模块读取显示保存图片
2021/06/04 Python
Vue如何清空对象
2022/03/03 Vue.js