python连接MySQL、MongoDB、Redis、memcache等数据库的方法


Posted in Python onNovember 15, 2013

用Python写脚本也有一段时间了,经常操作数据库(MySQL),现在就整理下对各类数据库的操作,如后面有新的参数会补进来,慢慢完善。

一,python 操作 MySQL:详情见:
【apt-get install python-mysqldb】

#!/bin/env python
# -*- encoding: utf-8 -*-
#-------------------------------------------------------------------------------
# Purpose:     example for python_to_mysql
# Author:      zhoujy
# Created:     2013-06-14
# update:      2013-06-14
#-------------------------------------------------------------------------------
import MySQLdb
import os
#建立和数据库系统的连接,格式
#conn   = MySQLdb.connect(host='localhost',user='root',passwd='123456',db='test',port=3306,charset='utf8')
#指定配置文件,确定目录,或则写绝对路径
cwd = os.path.realpath(os.path.dirname(__file__))
db_conf = os.path.join(cwd, 'db.conf')
conn   = MySQLdb.connect(read_default_file=db_conf,host='localhost',db='test',port=3306,charset='utf8')
#要执行的sql语句
query  = 'select id  from t1'
#获取操作游标
cursor = conn.cursor()
#执行SQL
cursor.execute(query)
#获取一条记录,每条记录做为一个元组返回,返回3,游标指到第2条记录。
result1 = cursor.fetchone()
for i in result1:
    print i
#返回影响的行数
    print cursor.rowcount
#获取指定数量记录,每条记录做为一个元组返回,返回1,2,游标从第2条记录开始,游标指到第4条记录。
result2 = cursor.fetchmany(2)
for i in result2:
    for ii in i:
        print ii

#获取所有记录,每条记录做为一个元组返回,返回3,4,7,6,游标从第4条记录开始到最后。
result3 = cursor.fetchall()
for i in result3:
    for ii in i:
        print ii
#获取所有记录,每条记录做为一个元组返回,返回3,4,7,6,游标从第1条记录开始
#重置游标位置,0为偏移量,mode=absolute | relative,默认为relative
cursor.scroll(0,mode='absolute')
result3 = cursor.fetchall()
for i in result3:
    for ii in i:
        print ii
#以下2种方法都可以把数据插入数据库:
#(one)
for i in range (10,20):
    query2 = 'insert into t1 values("%d",now())' %i
    cursor.execute(query2)
    #提交
    conn.rollback()
#(two)
rows = []
for i in range (10,20):
    rows.append(i)
query2 = 'insert into t1 values("%s",now())'
#executemany 2个参数,第2个参数是变量。
cursor.executemany(query2,rows)
#提交
conn.commit()
#选择数据库
query3 = 'select id from dba_hospital'
#重新选择数据库
conn.select_db('chushihua')
cursor.execute(query3)
result4 = cursor.fetchall()
for i in result4:
    for ii in i:
        print ii
#不定义query,直接执行:
cursor.execute("set session binlog_format='mixed'")
#关闭游标,释放资源
cursor.close()
'''
+------+---------------------+
| id   | modifyT             |
+------+---------------------+
|    3 | 2010-01-01 00:00:00 |
|    1 | 2010-01-01 00:00:00 |
|    2 | 2010-01-01 00:00:00 |
|    3 | 2010-01-01 00:00:00 |
|    4 | 2013-06-04 17:04:54 |
|    7 | 2013-06-04 17:05:36 |
|    6 | 2013-06-04 17:05:17 |
+------+---------------------+
'''

注意:在脚本中,密码写在脚本里面很容易暴露,这样可以用一个配置文件的方式来存密码,如db.conf:

[client]
user=root
password=123456

二,python 操作 MongoDB:

#!/bin/env python
# -*- encoding: utf-8 -*-
#-------------------------------------------------------------------------------
# Purpose:     example for python_to_mongodb
# Author:      zhoujy
# Created:     2013-06-14
# update:      2013-06-14
#-------------------------------------------------------------------------------
import pymongo
import os
#建立和数据库系统的连接,创建Connection时,指定host及port参数
conn   = pymongo.Connection(host='127.0.0.1',port=27017)
#admin 数据库有帐号,连接-认证-切换库
db_auth = conn.admin
db_auth.authenticate('sa','sa')
#连接数据库
db = conn.abc
#连接表
collection = db.stu
#查看全部表名称
db.collection_names()
#print db.collection_names()
#访问表的数据,指定列
item = collection.find({},{"sname":1,"course":1,"_id":0})
for rows in item:
    print rows.values()
#访问表的一行数据
print collection.find_one()
#得到所有的列
for rows in collection.find_one():
    print rows
#插入
collection.insert({"sno":100,"sname":"jl","course":{"D":80,"S":85}})
#或
u = dict(sno=102,sname='zjjj',course={"D":80,"S":85})
collection.insert(u)
#得到行数
print collection.find().count()
print collection.find({"sno":100})
#排序,按照某一列的值。pymongo.DESCENDING:倒序;pymongo.ASCENDING:升序。按照sno倒序
item = collection.find().sort('sno',pymongo.DESCENDING) 
for rows in item:
    print rows.values()
#多列排序
item = collection.find().sort([('sno',pymongo.DESCENDING),('A',pymongo.ASCENDING)])
#更新,第一个参数是条件,第二个参数是更新操作,$set,%inc,$push,$ne,$addToSet,$rename 等
collection.update({"sno":100},{"$set":{"sno":101}})
#更新多行和多列
collection.update({"sno":102},{"$set":{"sno":105,"sname":"SSSS"}},multi=True)
#删除,第一个参数是条件,第二个参数是删除操作。
collection.remove({"sno":101})
'''
sno:学号;sname:姓名;course:科目
db.stu.insert({"sno":1,"sname":"张三","course":{"A":95,"B":90,"C":65,"D":74,"E":100}})
db.stu.insert({"sno":2,"sname":"李四","course":{"A":90,"B":85,"X":75,"Y":64,"Z":95}})
db.stu.insert({"sno":3,"sname":"赵五","course":{"A":70,"B":56,"F":85,"G":84,"H":80}})
db.stu.insert({"sno":4,"sname":"zhoujy","course":{"A":64,"B":60,"C":95,"T":94,"Y":85}})
db.stu.insert({"sno":5,"sname":"abc","course":{"A":87,"B":70,"Z":56,"G":54,"H":75}})
db.stu.insert({"sno":6,"sname":"杨六","course":{"A":65,"U":80,"C":78,"R":75,"N":90}})
db.stu.insert({"sno":7,"sname":"陈二","course":{"A":95,"M":68,"N":84,"S":79,"K":89}})
db.stu.insert({"sno":8,"sname":"zhoujj","course":{"P":90,"B":77,"J":85,"K":68,"L":80}})
db.stu.insert({"sno":9,"sname":"ccc","course":{"Q":85,"B":86,"C":90,"V":87,"U":85}})
'''

计算Mongodb文档中各集合的数目:

import pymongo
conn   = pymongo.Connection(host='127.0.0.1',port=27017)
db = conn.abc    #abc文档
for tb_name in db.collection_names():     #循环出各集合名
    Count = db[tb_name].count()            #计算各集合的数量
    if Count > 2:                                 #过滤条件
        print tb_name + ':' + str(Count) 
'''
conn   = pymongo.Connection(host='127.0.0.1',port=27017)
db = conn.abc
for tb_name in db.collection_names():
    print tb_name + ':' 
    exec('print ' + 'db.'+tb_name+'.count()')      #变量当集合的处理方式
OR
conn   = pymongo.Connection(host='127.0.0.1',port=27017)
db = conn.abc
for tb_name in db.collection_names():
    mon_dic=db.command("collStats", tb_name)      #以字典形式返回
    print mon_dic.get('ns'),mon_dic.get('count')
'''

三,python 操作 Redis:

#!/bin/env python
# -*- encoding: utf-8 -*-
#-------------------------------------------------------------------------------
# Purpose:     example for python_to_mongodb
# Author:      zhoujy
# Created:     2013-06-14
# update:      2013-06-14
#-------------------------------------------------------------------------------
import redis
f = open('aa.txt')
while True:
    line = f.readline().strip().split(' # ')
    if line == ['']:
        break
    UserName,Pwd,Email = line
#    print name.strip(),pwd.strip(),email.strip()
    rc = redis.StrictRedis(host='127.0.0.1',port=6379,db=15)
    rc.hset('Name:' + UserName,'Email',Email)
    rc.hset('Name:' + UserName,'Password',Pwd)
f.close()
alluser = rc.keys('*')
#print alluser
print "===================================读出存进去的数据==================================="
for user in alluser:
    print ' # '.join((user.split(':')[1],rc.hget(user,'Password'),rc.hget(user,'Email')))

四,python 操作 memcache:

import memcache
mc = memcache.Client(['127.0.0.1:11211'],debug=1)
#!/usr/bin/env python
#coding=utf-8
import MySQLdb
import memcache
import sys
import time
def get_data(mysql_conn):
#    nn = raw_input("press string name:")
    mc = memcache.Client(['127.0.0.1:11211'],debug=1)
    t1 =time.time()
    value = mc.get('zhoujinyia') 
    if value == None:
        t1 = time.time()
        print t1
        query = "select company,email,sex,address from uc_user_offline where realName = 'zhoujinyia'"
        cursor= mysql_conn.cursor()
        cursor.execute(query)
        item = cursor.fetchone()
        t2 = time.time()
        print t2
        t = round(t2-t1)
        print "from mysql cost %s sec" %t 
        print item
        mc.set('zhoujinyia',item,60)
    else :
        t2 = time.time()
        t=round(t2-t1)
        print "from memcache cost %s sec" %t
        print value
if __name__ =='__main__':
    mysql_conn = MySQLdb.connect(host='127.0.0.1',user='root',passwd='123456',db='member',port=3306,charset='utf8')
    get_data(mysql_conn)
Python 相关文章推荐
python 算法 排序实现快速排序
Jun 05 Python
Python中列表元素转为数字的方法分析
Jun 14 Python
python导入时小括号大作用
Jan 10 Python
python读取excel指定列数据并写入到新的excel方法
Jul 10 Python
Python求两点之间的直线距离(2种实现方法)
Jul 07 Python
原来我一直安装 Python 库的姿势都不对呀
Nov 11 Python
使用OpenCV-python3实现滑动条更新图像的Canny边缘检测功能
Dec 12 Python
python模块和包的应用BASE_PATH使用解析
Dec 14 Python
在jupyter notebook中调用.ipynb文件方式
Apr 14 Python
用opencv给图片换背景色的示例代码
Jul 08 Python
python自动提取文本中的时间(包含中文日期)
Aug 31 Python
再谈python_tkinter弹出对话框创建
Mar 20 Python
python实现代理服务功能实例
Nov 15 #Python
Python(Tornado)模拟登录小米抢手机
Nov 12 #Python
Python3实现的腾讯微博自动发帖小工具
Nov 11 #Python
python正则分组的应用
Nov 10 #Python
python Django连接MySQL数据库做增删改查
Nov 07 #Python
使用Python下载Bing图片(代码)
Nov 07 #Python
python中文乱码的解决方法
Nov 04 #Python
You might like
学习php设计模式 php实现原型模式(prototype)
2015/12/07 PHP
/etc/php-fpm.d/www.conf 配置注意事项
2017/02/04 PHP
php进程daemon化的正确实现方法
2018/09/06 PHP
半角全角相互转换的js函数
2009/10/16 Javascript
基于jquery循环map功能的代码
2011/02/26 Javascript
jquery 插件学习(五)
2012/08/06 Javascript
jquery之超简单的div显示和隐藏特效demo(分享)
2013/07/09 Javascript
javascript用户注册提示效果的简单实例
2013/08/17 Javascript
jquery控制display属性为none或block
2014/03/31 Javascript
影响jQuery使用的14个方面
2014/09/01 Javascript
javascript 回调函数详解
2014/11/11 Javascript
JS+CSS实现电子商务网站导航模板效果代码
2015/09/10 Javascript
Django使用多数据库的方法
2017/09/06 Javascript
vue.js使用v-if实现显示与隐藏功能示例
2018/07/06 Javascript
vue-music 使用better-scroll遇到轮播图不能自动轮播问题
2018/12/03 Javascript
详解Vue This$Store总结
2018/12/17 Javascript
vue router动态路由设置参数可选问题
2019/08/21 Javascript
vue实现标签云效果的示例
2020/11/09 Javascript
[00:43]2016完美“圣”典风云人物:单车宣传片
2016/12/02 DOTA
[42:35]2018DOTA2亚洲邀请赛3月30日 小组赛A组 VG VS OpTic
2018/03/31 DOTA
[44:22]完美世界DOTA2联赛循环赛 FTD vs PXG BO2第一场 11.01
2020/11/02 DOTA
python抓取某汽车网数据解析html存入excel示例
2013/12/04 Python
python3实现短网址和数字相互转换的方法
2015/04/28 Python
Python应用03 使用PyQT制作视频播放器实例
2016/12/07 Python
python检查URL是否正常访问的小技巧
2017/02/25 Python
python爬虫爬取微博评论案例详解
2019/03/27 Python
python elasticsearch环境搭建详解
2019/09/02 Python
P/Invoke是什么
2015/07/31 面试题
电大本科自我鉴定
2014/02/05 职场文书
捐款活动总结
2014/08/27 职场文书
个人四风问题对照检查材料
2014/10/01 职场文书
2015元旦晚会主持人开场白+结束语
2014/12/14 职场文书
结婚喜宴迎宾词
2015/08/10 职场文书
家访教师心得体会
2016/01/23 职场文书
正确的理解和使用Django信号(Signals)
2021/04/14 Python
vue-cli3.x配置全局的scss的时候报错问题及解决
2022/04/30 Vue.js