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判断操作系统类型代码分享
Nov 22 Python
python读写ini配置文件方法实例分析
Jun 30 Python
详解Python中的__getitem__方法与slice对象的切片操作
Jun 27 Python
Python设计模式之工厂模式简单示例
Jan 09 Python
基于python进行桶排序与基数排序的总结
May 29 Python
对python Tkinter Text的用法详解
Oct 11 Python
Python 一句话生成字母表的方法
Jan 02 Python
python安装numpy和pandas的方法步骤
May 27 Python
python利用多种方式来统计词频(单词个数)
May 27 Python
Python基础之列表常见操作经典实例详解
Feb 26 Python
python中数字是否为可变类型
Jul 08 Python
python可视化之颜色映射详解
Sep 15 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网站提速三大“软”招
2006/10/09 PHP
php session_start()关于Cannot send session cache limiter - headers already sent错误解决方法
2009/11/27 PHP
php mail to 配置详解
2014/01/16 PHP
php实现数组筛选奇数和偶数示例
2014/04/11 PHP
PHPAnalysis中文分词类详解
2014/06/13 PHP
php魔术函数__call()用法实例分析
2015/02/13 PHP
PHP安全上传图片的方法
2015/03/21 PHP
php eval函数一句话木马代码
2015/05/21 PHP
Zend Framework创建自己的动作助手详解
2016/03/05 PHP
php微信开发之带参数二维码的使用
2016/08/03 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
js替代copy(示例代码)
2013/11/27 Javascript
JavaScript实现文字与图片拖拽效果的方法
2015/02/16 Javascript
浅谈javascript原型链与继承
2015/07/13 Javascript
谈谈impress.js初步理解
2015/09/09 Javascript
Bootstrap3学习笔记(二)之排版
2016/05/20 Javascript
JavaScript中的子窗口与父窗口的互相调用问题
2017/02/08 Javascript
Vue刷新修改页面中数据的方法
2018/09/16 Javascript
基于vue-cli 路由 实现类似tab切换效果(vue 2.0)
2019/05/08 Javascript
微信小程序与公众号实现数据互通的方法
2019/07/25 Javascript
VSCode launch.json配置详细教程
2020/06/18 Javascript
python根据经纬度计算距离示例
2014/02/16 Python
python对excel文档去重及求和的实例
2018/04/18 Python
python中多层嵌套列表的拆分方法
2018/07/02 Python
CSS实现定位元素居中的方法
2015/06/23 HTML / CSS
德国婴儿推车和儿童安全座椅商店:BABYSHOP
2016/09/01 全球购物
Oroton中国官网:澳洲知名奢侈配饰品牌
2017/03/26 全球购物
瑞士首家网上药店折扣店:McDrogerie
2020/12/22 全球购物
英语简历自我评价
2014/01/26 职场文书
优秀经理事迹材料
2014/02/01 职场文书
Python中threading库实现线程锁与释放锁
2021/05/17 Python
浅谈Redis中的RDB快照
2021/06/29 Redis
利用 Python 的 Pandas和 NumPy 库来清理数据
2022/04/13 Python
Golang bufio详细讲解
2022/04/21 Golang
MySQL数据库实验之 触发器和存储过程
2022/06/21 MySQL
Vite + React从零开始搭建一个开源组件库
2022/06/25 Javascript