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 Web框架Flask中使用新浪SAE云存储实例
Feb 08 Python
Python使用matplotlib绘制动画的方法
May 20 Python
在Python的Django框架中加载模版的方法
Jul 16 Python
python 文件操作api(文件操作函数)
Aug 28 Python
python正则分析nginx的访问日志
Jan 17 Python
Python实现生成随机数据插入mysql数据库的方法
Dec 25 Python
详谈pandas中agg函数和apply函数的区别
Apr 20 Python
Python 忽略warning的输出方法
Oct 18 Python
python字典一键多值实例代码分享
Jun 14 Python
python修改字典键(key)的方法
Aug 05 Python
关于windows下Tensorflow和pytorch安装教程
Feb 04 Python
python 自定义异常和主动抛出异常(raise)的操作
Dec 11 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 上一篇,下一篇文章实现代码与原理说明
2010/05/09 PHP
PHP中的use关键字概述
2014/07/23 PHP
php图片上传类 附调用方法
2016/05/15 PHP
php实现数据库的增删改查
2017/02/26 PHP
js模拟点击事件实现代码
2012/11/06 Javascript
浅析JQuery获取和设置Select选项的常用方法总结
2013/07/04 Javascript
jquery常用特效方法使用示例
2014/04/25 Javascript
简单学习JavaScript中的for语句循环结构
2015/11/10 Javascript
浅谈JavaScript中小数和大整数的精度丢失
2016/05/31 Javascript
bootstrap table实现双击可编辑、添加、删除行功能
2017/09/27 Javascript
使用express+multer实现node中的图片上传功能
2018/02/02 Javascript
实现jquery放大镜的两种方法
2018/02/22 jQuery
详解从NodeJS搭建中间层再谈前后端分离
2018/11/13 NodeJs
如何使用electron-builder及electron-updater给项目配置自动更新
2018/12/24 Javascript
webpack-mvc 传统多页面组件化开发详解
2019/05/07 Javascript
详解JavaScript 异步编程
2020/07/13 Javascript
[53:15]2018DOTA2亚洲邀请赛3月29日 小组赛A组 KG VS OG
2018/03/30 DOTA
[03:08]TI9战队档案 - Vici Gaming
2019/08/20 DOTA
python读写json文件的简单实现
2017/04/11 Python
python3调用R的示例代码
2018/02/23 Python
Python使用pandas对数据进行差分运算的方法
2018/12/22 Python
Python multiprocess pool模块报错pickling error问题解决方法分析
2019/03/20 Python
Python在终端通过pip安装好包以后在Pycharm中依然无法使用的问题(三种解决方案)
2020/03/10 Python
python filecmp.dircmp实现递归比对两个目录的方法
2020/05/22 Python
Python-opencv实现红绿两色识别操作
2020/06/04 Python
Python过滤序列元素的方法
2020/07/31 Python
西班牙品牌鞋子、服装和配饰在线商店:Esdemarca
2021/02/17 全球购物
共产党员承诺书
2014/03/25 职场文书
国贸专业毕业求职信
2014/06/11 职场文书
学校四风对照检查材料
2014/08/28 职场文书
没有孩子的离婚协议书怎么写
2014/09/17 职场文书
搞笑婚庆主持词
2015/06/29 职场文书
合作意向书怎么写
2019/06/24 职场文书
深入理解Vue的数据响应式
2021/05/15 Vue.js
Java设计模式之享元模式示例详解
2022/03/03 Java/Android
Golang 实现 WebSockets 之创建 WebSockets
2022/04/24 Golang