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迭代器的使用方法实例
Nov 21 Python
在Python中marshal对象序列化的相关知识
Jul 01 Python
非递归的输出1-N的全排列实例(推荐)
Apr 11 Python
Python实现的微信公众号群发图片与文本消息功能实例详解
Jun 30 Python
Python日期的加减等操作的示例
Aug 15 Python
PyTorch上搭建简单神经网络实现回归和分类的示例
Apr 28 Python
详解python3中的真值测试
Aug 13 Python
Python批量生成幻影坦克图片实例代码
Jun 04 Python
Pytorch使用MNIST数据集实现基础GAN和DCGAN详解
Jan 10 Python
在python中修改.properties文件的操作
Apr 08 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
May 19 Python
Keras设置以及获取权重的实现
Jun 19 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 empty,isset,is_null判断比较(差异与异同)
2010/10/19 PHP
php数组函数序列之array_values() 获取数组元素值的函数与方法
2011/10/30 PHP
php中常用字符串处理代码片段整理
2011/11/07 PHP
PHP 利用Mail_MimeDecode类提取邮件信息示例
2014/01/26 PHP
php从给定url获取文件扩展名的方法
2015/03/14 PHP
jQuery select表单提交省市区城市三级联动核心代码
2014/06/09 Javascript
浅谈javascript的闭包
2017/01/23 Javascript
vue生成token并保存到本地存储中
2018/07/17 Javascript
vue兄弟组件传递数据的实例
2018/09/06 Javascript
Next.js实现react服务器端渲染的方法示例
2019/01/06 Javascript
使用nodejs分离html文件里的js和css详解
2019/04/12 NodeJs
Vue基本使用之对象提供的属性功能
2019/04/30 Javascript
JavaScript Dom 绑定事件操作实例详解
2019/10/02 Javascript
详解vue中v-on事件监听指令的基本用法
2020/07/22 Javascript
vue 导航守卫和axios拦截器有哪些区别
2020/12/19 Vue.js
Python读写ini文件的方法
2015/05/28 Python
Python ldap实现登录实例代码
2016/09/30 Python
分享vim python缩进等一些配置
2018/07/02 Python
python 用所有标点符号分隔句子的示例
2019/07/15 Python
pygame实现俄罗斯方块游戏(基础篇2)
2019/10/29 Python
在Keras中利用np.random.shuffle()打乱数据集实例
2020/06/15 Python
python把一个字符串切开的实例方法
2020/09/27 Python
CSS3文本换行word-wrap解决英文文本超过固定宽度不换行
2013/10/10 HTML / CSS
HTML5的语法变化介绍
2013/08/13 HTML / CSS
HTML5 script元素async、defer异步加载使用介绍
2013/08/23 HTML / CSS
巴西网上药房:onofre
2016/11/21 全球购物
在校生钳工实习自我鉴定
2013/09/19 职场文书
办公室保洁员岗位职责
2013/12/02 职场文书
采购内勤岗位职责
2013/12/10 职场文书
文明餐桌行动实施方案
2014/02/19 职场文书
宣传普通话标语
2014/06/27 职场文书
工地材料员岗位职责
2015/04/11 职场文书
2015年财务个人工作总结范文
2015/05/22 职场文书
小学生读书笔记范文
2015/06/30 职场文书
创新创业项目计划书该怎样写?
2019/08/13 职场文书
GTX1660显卡搭配显示器推荐
2022/04/19 数码科技