摘要:

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

一,python 操作 MySQL:详情见:这里

mac 安装:http://sourceforge.net/projects/mysql-python/?source=dlp  再sudo python setup.py build

【apt-get install python-mysqldb】

【yum install python-devel  & pip install MySQL-python】

#!/bin/env python#-*- encoding: utf-8 -*-#-------------------------------------------------------------------------------#Purpose: example for python_to_mysql#Author: zhoujy#Created: 2013-06-14#update: 2013-06-14#-------------------------------------------------------------------------------

importMySQLdbimportos#建立和数据库系统的连接,格式#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 inresult1:printi#返回影响的行数

printcursor.rowcount#获取指定数量记录,每条记录做为一个元组返回,返回1,2,游标从第2条记录开始,游标指到第4条记录。

result2 = cursor.fetchmany(2)for i inresult2:for ii ini:printii#获取所有记录,每条记录做为一个元组返回,返回3,4,7,6,游标从第4条记录开始到最后。

result3 =cursor.fetchall()for i inresult3:for ii ini:printii#获取所有记录,每条记录做为一个元组返回,返回3,4,7,6,游标从第1条记录开始#重置游标位置,0为偏移量,mode=absolute | relative,默认为relative

cursor.scroll(0,mode='absolute')

result3=cursor.fetchall()for i inresult3:for ii ini:printii#以下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 inresult4:for ii ini:printii

#不定义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#-------------------------------------------------------------------------------

importpymongoimportos#建立和数据库系统的连接,创建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 initem:printrows.values()#访问表的一行数据

print collection.find_one()

#得到所有的列

for rows incollection.find_one():printrows#插入

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)#得到行数

printcollection.find().count()print collection.find({"sno":100})#排序,按照某一列的值。pymongo.DESCENDING:倒序;pymongo.ASCENDING:升序。按照sno倒序

item = collection.find().sort('sno',pymongo.DESCENDING)for rows initem:printrows.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文档中各集合的数目:

importpymongo

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')'''

updatetime:2015-06-30

MongoDB升级到了3.0之后,用python的连接会出错:

pymongo.errors.OperationFailure: command SON([('authenticate', 1), ('user', u'dba'), ('nonce', u'8c7842b068e14d3'), ('key', u'584ec63f1cdfd8525ce33d99cd269c2c')]) failed: auth failed

表示认证失败,说明MongoDB升级之后,对用用户的加密方式改变了。那就升级pymongo。

zhoujy@zhoujy:~$ sudo pip install pymongo --upgrade

[sudo] password forzhoujy:

...

...

Successfully installed pymongo

Cleaning up...

ubuntu10.10之后:

$ sudo apt-get install python-pip python-dev build-essential

$ sudo pip install--upgrade pip

$ sudo pip install --upgrade virtualenv

ubuntu10.10之前的老版本:

$ sudo apt-get install python-setuptools python-dev build-essential

$ sudo easy_install pip

$ sudo pip install--upgrade virtualenv

升级成功之后,继续执行python脚本,还是出错:

AttributeError: 'module' object has no attribute 'Connection'

表示没有 Connection ,pymongo升级完之后不支持了,看手册,发现用MongoClient 来替换了Connection。修改脚本:

conn = pymongo.Connection(host='127.0.0.1',port=27017)

改成

conn= pymongo.MongoClient(host='127.0.0.1',port=27017)

最后执行python,正常。

三,python 操作 Redis:详情见这里 和 这里/这里;集群连接

#!/bin/env python#-*- encoding: utf-8 -*-#-------------------------------------------------------------------------------#Purpose: example for python_to_mongodb#Author: zhoujy#Created: 2013-06-14#update: 2013-06-14#-------------------------------------------------------------------------------

importredis

f= open('aa.txt')whileTrue:

line= f.readline().strip().split('#')if line == ['']:breakUserName,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 inalluser:print '#'.join((user.split(':')[1],rc.hget(user,'Password'),rc.hget(user,'Email')))

一个pipeline的请看:

四,python 操作 memcache:详情见 这里 和 这里

importmemcache

mc = memcache.Client(['127.0.0.1:11211'],debug=1)

#!/usr/bin/env python#coding=utf-8

importMySQLdbimportmemcacheimportsysimporttimedefget_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()printt1

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()printt2

t= round(t2-t1)print "from mysql cost %s sec" %tprintitem

mc.set('zhoujinyia',item,60)else:

t2=time.time()

t=round(t2-t1)print "from memcache cost %s sec" %tprintvalueif __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连数据库课程设计_python 连接操作 各类数据库相关推荐

  1. 数据库课程设计:建材物资管理系统数据库课程设计

    数据库课程设计:建材物资管理系统数据库课程设计 ** 一.课设简述 ** 本次设计基于大二学习的数据库原理这门课程,选择了建材物资管理系统这个课设题目,在查阅了相关资料后,设计了集进货商家信息,进货报 ...

  2. python简易爬虫课程设计_python实现简单爬虫功能的示例

    在我们日常上网浏览网页的时候,经常会看到一些好看的图片,我们就希望把这些图片保存下载,或者用户用来做桌面壁纸,或者用来做设计的素材. 我们最常规的做法就是通过鼠标右键,选择另存为.但有些图片鼠标右键的 ...

  3. 大工21春《SQL数据库课程设计》模板及要求

    远程与继续教育学院 <SQL数据库课程设计>大作业                                                                      ...

  4. 数据库课程设计-员工信息管理系统(基于python和MySQL实现)

    一.项目地址 具体项目相关信息可移步至我的Github查看,那里有整套项目文件以及课程设计报告等,仅供交流学习和参考,如有错误之处请多多指正哦. 二.系统定义 随着计算机技术的不断发展,计算机作为知识 ...

  5. 数据库课程设计结论_结论

    数据库课程设计结论 Living in the Pacific Northwest, the intertwined issues of salmon survival and river flow ...

  6. 查询学生选修课程管理系统java_JAVA数据库课程设计学生选课管理系统的

    <JAVA数据库课程设计学生选课管理系统的>由会员分享,可在线阅读,更多相关<JAVA数据库课程设计学生选课管理系统的(59页珍藏版)>请在人人文库网上搜索. 1.一.课程设计 ...

  7. 数据库课程设计基于php,数据库课程设计(DatabaseCourseDesign)

    12月17日:数据库课程设计开始,选择题目一 12.18-12.19上午:完成身份选择页面.学生登陆页面.新生信息填写页面.数据库的建立 12月19日下午:开始用PHP正式正式连接数据库,在碰到一系列 ...

  8. 【数据库课程设计】金融数据库设计与实现

    数据库课程设计 文章目录 数据库课程设计 1.E-R图 2.E-R图转换为关系模式 2.1 实体集的处理 2.2 联系集的处理 2.3 整理合并 3.数据模型 3.1对象及属性对应的编号 3.2 数据 ...

  9. 数据库课程设计——学生宿舍信息管理系统

    数据库课程设计--学生宿舍信息管理系统 目录 1.设计目的... 2 2.任务与要求... 2 3.学生宿舍管理系统课程设计... 2 3.1 引言... 2 3.2需求分析... 2 3.2.1. ...

最新文章

  1. ios 常用数学函数
  2. 电脑端跳转手机版的php代码,帝国CMS电脑端自动跳转到手机端移动端的方法
  3. 字符设备驱动程序之按键——同步互斥阻塞
  4. 姚期智:人工智能存在三大技术瓶颈
  5. 这门国产编程语言,确实很棒!
  6. 基于Sql Server 2008的分布式数据库的实践
  7. 爬虫最基本的工作流程:内涵社区网站为例
  8. php 编程祝新年快乐_第一门编程语言选什么好?
  9. VSCode 花式玩法(摸鱼)了解一下
  10. 服务端渲染(SSR)
  11. 学习STM32的理由
  12. 语音通知API - onealert的语音通告替代调研
  13. php文字加边框,word怎么给段落加边框
  14. 2021年上海市安全员C证考试报名及上海市安全员C证找解析
  15. 常见的DNSBL(邮件黑名单),及DNSBL(邮件黑名单)的选择
  16. python爬虫股票市盈率_量化交易的第一步,Python爬取股票数据
  17. meizz (梅花雨)的一些珍藏代码奉献(转)
  18. Object.assign是浅拷贝还是深拷贝?
  19. 存储大师班:NFS 的诞生与成长
  20. Hadoop配置datanode

热门文章

  1. php微信支付分取消订单,微信支付PHP开发教程五关闭订单
  2. oracle迁移到mysql工具_oracle数据库想迁移到mysql上 有什么方法或者工具吗
  3. VIP到131970年过期就离谱~
  4. 一个没法商用,但是好玩有趣的 Python 手绘图形库!
  5. java 正则首位8或者9的8位数字_Python 正则表达式re最完整的操作教程
  6. 喜马拉雅 xm文件转m4a_4K YouTube to MP3 Mac(YouTube转mp3软件)
  7. laravel 分词搜索匹配度_SEO除了“中文分词”还有“文本分析”- 搜狗蜘蛛池博客...
  8. 机器学习实战-KNN算法-20
  9. ironpython console是否可以卸载_IronPython的第十块鳞片
  10. 深度学习stride_深度学习圣经“花书”各章摘要与笔记整理