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判断一个集合是否包含了另外一个集合中所有项的方法
Jun 30 Python
Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)
Nov 16 Python
Python 通过pip安装Django详细介绍
Apr 28 Python
Python实现的双色球生成功能示例
Dec 18 Python
详谈套接字中SO_REUSEPORT和SO_REUSEADDR的区别
Apr 28 Python
在cmd中运行.py文件: python的操作步骤
May 12 Python
python使用selenium登录QQ邮箱(附带滑动解锁)
Jan 23 Python
Django生成PDF文档显示在网页上以及解决PDF中文显示乱码的问题
Jul 04 Python
python 日期排序的实例代码
Jul 11 Python
使用python将最新的测试报告以附件的形式发到指定邮箱
Sep 20 Python
Python 实现将某一列设置为str类型
Jul 14 Python
Python远程方法调用实现过程解析
Jul 28 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
Discuz板块横排显示图片的实现方法
2007/05/28 PHP
php 图像函数大举例(非原创)
2009/06/20 PHP
PHP 文件上传功能实现代码
2009/06/24 PHP
DW中链接mysql数据库时,建立字符集中文出现乱码的解决方法
2010/03/27 PHP
PHP提取字符串中的图片地址[正则表达式]
2011/11/12 PHP
浅谈Laravel中的一个后期静态绑定
2017/08/11 PHP
Jquery判断IE6等浏览器的代码
2011/04/05 Javascript
js将long日期格式转换为标准日期格式实现思路
2013/04/07 Javascript
jquery中选择块并改变属性值的方法
2013/07/31 Javascript
jQuery点击弹出下拉菜单的小例子
2013/08/01 Javascript
javascript计算星座属相(十二生肖属相)示例代码
2014/01/09 Javascript
浅谈JS日期(Date)处理函数
2014/12/07 Javascript
node.js中的http.request.end方法使用说明
2014/12/10 Javascript
基于angular实现模拟微信小程序swiper组件
2017/06/11 Javascript
使用Three.js实现太阳系八大行星的自转公转示例代码
2019/04/09 Javascript
Javascript读取上传文件内容/类型/字节数
2019/04/30 Javascript
Jquery+AJAX实现无刷新上传并重命名文件操作示例【PHP后台接收】
2020/05/29 jQuery
[01:58]DOTA2上海特级锦标赛现场采访:RTZ这个ID到底好不好
2016/03/25 DOTA
python写的一个文本编辑器
2014/01/23 Python
python fabric实现远程操作和部署示例
2014/03/25 Python
一个超级简单的python web程序
2014/09/11 Python
分享一个常用的Python模拟登陆类
2015/03/29 Python
Python对文件操作知识汇总
2016/05/15 Python
Python 保存矩阵为Excel的实现方法
2019/01/28 Python
tensorflow安装成功import tensorflow 出现问题
2020/04/16 Python
20行Python代码实现一款永久免费PDF编辑工具的实现
2020/08/27 Python
英国设计师珠宝网站:Joshua James Jewellery
2020/03/01 全球购物
宝信软件JAVA工程师面试经历
2012/08/19 面试题
军训的自我鉴定
2013/12/10 职场文书
超市后勤自我鉴定
2014/01/17 职场文书
考试没考好检讨书
2014/01/31 职场文书
父亲的菜园教学反思
2014/02/13 职场文书
2014老师三严三实对照检查材料思想汇报
2014/09/18 职场文书
教师党员个人自我评价
2015/03/04 职场文书
Nginx优化服务之网页压缩的实现方法
2021/03/31 Servers
Win11 Build 25179预览版发布(附更新内容+ISO官方镜像下载)
2022/08/14 数码科技