设为首页 收藏本站
查看: 655|回复: 0

[经验分享] 第十三章 Python数据库编程

[复制链接]
发表于 2018-8-4 06:27:33 | 显示全部楼层 |阅读模式
  本章节讲解Python操作数据库,完成简单的增删改查工作,以MySQL数据库为例。
  Python的MySQL数据库操作模块叫MySQLdb,需要额外的安装下。
  通过pip工具安装:pip install MySQLdb
  MySQLdb模块,我们主要就用到连接数据库的方法MySQLdb.Connect(),连接上数据库后,再使用一些方法做相应的操作。
  MySQLdb.Connect(parameters...)方法提供了以下一些常用的参数:
  参数
  描述
host数据库地址user数据库用户名,passwd数据库密码,默认为空db数据库库名,没有默认库port数据库端口,默认3306connect_timeout连接超时时间,秒为单位use_unicode结果以unicode字符串返回charset插入数据库编码  连接对象返回的connect()函数:
commit()提交事务。对支持事务的数据库和表,如果提交修改操作,不适用这个方法,则不会写到数据库中rollback()事务回滚。对支持事务的数据库和表,如果执行此方法,则回滚当前事务。在没有commit()前提下。cursor([cursorclass])创建一个游标对象。所有的sql语句的执行都要在游标对象下进行。MySQL本身不支持游标,MySQLdb模块对其游标进行了仿真。  游标对象也提供了几种方法:
close()关闭游标execute(sql)执行sql语句excutemany(sql)执行多条sql语句fetchone()从执行结果中取第一条记录fetchmany(n)从执行结果中取n条记录fetchall()从执行结果中取所有记录scroll(self, value, mode='relative')游标滚动  
  
  博客地址:http://lizhenliang.blog.51cto.com
  QQ群:323779636(Shell/Python运维开发群)
  13.1 数据库增删改查
  13.1.1 在test库创建一张user表,并添加一条记录
>>> conn = MySQLdb.Connect(host='192.168.1.244',user='root',passwd='QHyCTajI',db='test',charset='utf8')  
>>> cursor = conn.cursor()
  
>>> sql = "create table user(id int,name varchar(30),password varchar(30))"
  
>>> cursor.execute(sql)   # 返回的数字是影响的行数
  
0L
  
>>> sql = "insert into user(id,name,password) values('1','xiaoming','123456')"
  
>>> cursor.execute(sql)
  
1L
  
>>> conn.commit()  # 提交事务,写入到数据库
  
>>> cursor.execute('show tables')  # 查看创建的表
  
1L
  
>>> cursor.fetchall()  # 返回上一个游标执行的所有结果,默认是以元组形式返回
  
((u'user',),)
  
>>> cursor.execute('select * from user')
  
1L
  
>>> cursor.fetchall()
  
((1L, u'xiaoming', u'123456'),)
  13.1.2 插入多条数据
>>> sql = 'insert into user(id,name,password) values(%s,%s,%s)'  
>>> args = [('2','zhangsan','123456'), ('3','lisi','123456'),('4','wangwu','123456')]
  
>>> cursor.executemany(sql, args)
  
3L
  
>>> conn.commit()
  
>>> sql = 'select * from user'
  
>>> cursor.execute(sql)
  
4L
  
>>> cursor.fetchall()
  
((1L, u'xiaoming', u'123456'), (2L, u'zhangsan', u'123456'), (3L, u'lisi', u'123456'), (4L, u'wangwu', u'123456'))
  args变量是一个包含多元组的列表,每个元组对应着每条记录。当查询多条记录时,使用此方法,可有效提高插入效率。
  13.1.3 删除用户名xiaoming的记录
>>> sql = 'delete from user where name="xiaoming"'  
>>> cursor.execute(sql)
  
1L
  
>>> conn.commit()
  
>>> sql = 'select * from user'
  
>>> cursor.execute(sql)
  
3L
  
>>> cursor.fetchall()
  
((2L, u'zhangsan', u'123456'), (3L, u'lisi', u'123456'), (4L, u'wangwu', u'123456'))
  13.1.4 查询记录
>>> sql = 'select * from user'  
>>> cursor.execute(sql)
  
3L
  
>>> cursor.fetchone()   # 获取第一条记录
  
(2L, u'zhangsan', u'123456')
  
>>> sql = 'select * from user'
  
>>> cursor.execute(sql)
  
3L
  
>>> cursor.fetchmany(2) # 获取两条记录
  
((2L, u'zhangsan', u'123456'), (3L, u'lisi', u'123456'))
  13.1.4 以字典形式返回结果
  默认显示是元组形式,要想返回字典形式,使得更易处理,就用到cursor([cursorclass])中的cusorclass参数。
  传入MySQLdb.cursors.DictCursor类:
>>> cursor = conn.cursor(MySQLdb.cursors.DictCursor)  
>>> sql = 'select * from user'
  
>>> cursor.execute(sql)
  
3L
  
>>> cursor.fetchall()
  
({'password': u'123456', 'id': 2L, 'name': u'zhangsan'}, {'password': u'123456', 'id': 3L, 'name': u'lisi'}, {'password': u'123456', 'id': 4L, 'name': u'wangwu'})
  13.2 遍历查询结果
#!/usr/bin/env python  
# -*- coding: utf-8 -*-
  
import MySQLdb
  
try:
  
    conn = MySQLdb.Connect(host='127.0.0.1', port=3306, user='root', passwd='123456', connect_timeout=3, charset='utf8')
  
    cursor = conn.cursor()
  
    sql = "select * from user"
  
    cursor.execute(sql)
  
    for i in cursor.fetchall():
  
        print i
  
except Exception, e:
  
    print ("Connection Error: " + str(e))
  
finally:
  
    conn.close()
  

  
# python test.py
  
(2L, u'zhangsan', u'123456')
  
(3L, u'lisi', u'123456')
  
(4L, u'wangwu', u'123456')
  使用for循环遍历查询结果,并增加了异常处理。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-546101-1-1.html 上篇帖子: Hacking python系列视频 下篇帖子: python编写爬虫刷流量
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表