文档章节

MySQLdb CRUD操作的最佳实践?

乐搏学院
 乐搏学院
发布于 2017/02/23 10:07
字数 1023
阅读 13
收藏 0

简单介绍:

说明: 此模块儿主要提供PY连接关系型数据库管理系统MySQL的接口,主要提供C(Create)R(Read)U(Update)D(Delete)接口,基于C API实现

 

快速安装:

1

2

pip install mysql-python

yum -y install MySQL-python

 

连接对象:

MySQLdb.connect(host='10.2.5.51', port=3306, user='root', passwd='root', db='pyweb', charset='utf8') -> conn

说明: 创建并返回一个数据库连接对象

conn.cursor() -> cursor

说明: 获取游标对象

conn.close() -> None

说明: 关闭数据库连接对象

 

游标对象:

cursor.execute(query, args) -> long

说明: 执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数

cursor.executemany(query, args) -> long

说明: 执行单条sql语句,但是重复执行参数列表里的参数,返回受影响的行数

cursor.rowcount -> int

说明: 只读属性,并返回执行excute/excutemany方法后影响的行数

cursor.fetchone() -> tuple

说明: 返回包含一个结果集的元组

cursor.fetchall() -> tuple

说明: 返回包含全部结果集的元组

cursor.fetchmany(size=None) -> tuple

说明: 返回指定条结果集的元组

cursor.callproc(procname, args) -> tuple

说明: 用来执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数

cursor.nextset()

说明: 移动到下一个结果集

cursor.scroll(value, mode='relative') -> None

说明:mode='relative'则表示从当前所在行跳过value条,如果mode='absolute',则表示从结果集中的第一条跳过value条

 

最佳实践:

1. Connect类源码中__enter__默认返回了游标,__exit__默认自动回滚,而这两个正是with语句的实现,它会自动判断当前是否有错误,有错误就自动回滚,没有则进行事务提交,而无需自己手动try捕捉回滚,所以在运维开发中常常会利用此特性来操作事务(主要用于操作量大,复杂度高,如删除一个用户不仅需要删除用户表中对应记录,还需要删除和用户表关联表中对应的数据),要么批量执行,要么不执行,只有InnoDB支持呦

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

#!/usr/bin/env python

# -*- coding: utf-8 -*-

"""

#

# Authors: limanman

# OsChina: http://xmdevops.blog.51cto.com/

# Purpose:

#

"""

# 说明: 导入公共模块

# 说明: 导入其它模块

 

HOSTNAME = '127.0.0.1'

USERNAME = 'flask'

PASSWORD = 'flask'

HOSTPORT = 3306

DATABASE = 'flask'

CHARSSET = 'utf8'

ALLDBURI = 'mysql://{}:{}@{}:{}/{}?charset={}'.format(USERNAME, PASSWORD, HOSTNAME, HOSTPORT, DATABASE, CHARSSET)

说明: 在运维开发中常常为了重复利用,会将一些常量存储在一个单独的PY文件中,然后引入

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

#!/usr/bin/env python

# -*- coding: utf-8 -*-

"""

#

# Authors: limanman

# OsChina: http://xmdevops.blog.51cto.com/

# Purpose:

#

"""

# 说明: 导入公共模块

import MySQLdb

from MySQLdb.cursors import DictCursor

from constants import USERNAME, PASSWORD, HOSTNAME, DATABASE, HOSTPORT

# 说明: 导入其它模块

def crud(conn):

    with conn as cursor:

        cursor.execute('drop table if exists users')

        cursor.execute('create table users(id int primary key auto_increment, '

                       'name varchar(20))')

        cursor.executemany('insert into users(id,name) values(null, %s)', args=[

            (u'李满满',), (u'刘珍珍',)

        ])

        cursor.execute('select * from users')

        rows = cursor.fetchall()

        print 'Ins res => {}'.format(rows)

        cursor.execute('update users set name=%s where id=%s', args=(u'满满李'1))

        print 'Upt res => {}'.format(cursor.rowcount)

if __name__ == '__main__':

    # 返回元组结果集

    conn = MySQLdb.connect(host=HOSTNAME, port=HOSTPORT, user=USERNAME, passwd=PASSWORD, db=DATABASE,

                           charset='utf8')

    # 返回字典结果集

    conn = MySQLdb.connect(host=HOSTNAME, port=HOSTPORT, user=USERNAME, passwd=PASSWORD, db=DATABASE,

                           charset='utf8', cursorclass=DictCursor)

    crud(conn)

说明: 如上是运维开发中CRUD常规做法,使用with语句避免手动事务提交和回滚,其实MySQLdb.cursors支持多种返回格式,常用的就是默认的返回元组结果集,但常常为了结合JinJa2等模版系统时候最好返回的是字典形式方便处理,此时可以在创建连接对象时指定cursorclass=DictCursor也可以在代码内部重新生成一个游标对象,cursor = conn.cursor(DictCursor)就可以局部设置返回字典型结果集.

 

登录乐搏学院官网http://www.learnbo.com/

或关注我们的官方微博微信,还有更多惊喜哦~

© 著作权归作者所有

乐搏学院
粉丝 9
博文 526
码字总数 707467
作品 0
丰台
程序员
私信 提问
python入门介绍及使用

1.python是什么 Python是一种计算机程序设计语言, Python是一种解释型,面向对象, 动态数据类型的高级设计语言 用Python可以做什么? 可以做日常任务, 比如自动备份你的MP3,可以做网站, 很多著...

陈小扁
2016/03/08
142
0
Python下访问MYSQL的方法总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zwgdft/article/details/52822432 在Python下做过服务器开发的小伙伴对ORM技术一定都不陌生,ORM(Object-Re...

Mr-Bruce
2016/10/15
0
0
不知道为什么SSH 这么流行

以前曾经用过 SSH 来做程序,有几个感受: Spring: 里面有些不错的最佳实践,这个东西确实比较实用。特别是Spring MVC,加上freemarker非常棒。而且体积很小。 JDBCTemplate 也蛮实用的 Hibe...

宏哥
2010/12/17
9.4K
92
Python 操作 MySQL数据库

一、安装 MySQL 可以直接从MySQL官方网站下载最新版本。MySQL是跨平台的,选择对应的平台下载安装文件,安装即可。 如果是Windows用户,那么安装过程非常简单,直接根据向导一步一步操作即可...

skypeGNU1
2016/06/22
0
0
ImportError: No module named MySQLdb

ImportError: No module named MySQLdb 该错误是源于我们没有安装Python连接MySQL所需的MySQLdb库而引起。 MySQL是最流行的开源数据库之一,但在Python标准库中并没有集成MySQL接口程序,MyS...

netmouse
2014/10/17
112
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring使用ThreadPoolTaskExecutor自定义线程池及实现异步调用

多线程一直是工作或面试过程中的高频知识点,今天给大家分享一下使用 ThreadPoolTaskExecutor 来自定义线程池和实现异步调用多线程。 一、ThreadPoolTaskExecutor 本文采用 Executors 的工厂...

CREATE_17
今天
5
0
CSS盒子模型

CSS盒子模型 组成: content --> padding --> border --> margin 像现实生活中的快递: 物品 --> 填充物 --> 包装盒 --> 盒子与盒子之间的间距 content :width、height组成的 内容区域 padd......

studywin
今天
7
0
修复Win10下开始菜单、设置等系统软件无法打开的问题

因为各种各样的原因导致系统文件丢失、损坏、被修改,而造成win10的开始菜单、设置等系统软件无法打开的情况,可以尝试如下方法解决 此方法只在部分情况下有效,但值得一试 用Windows键+R打开...

locbytes
昨天
8
0
jquery 添加和删除节点

本文转载于:专业的前端网站➺jquery 添加和删除节点 // 增加一个三和一节点function addPanel() { // var newPanel = $('.my-panel').clone(true) var newPanel = $(".triple-panel-con......

前端老手
昨天
8
0
一、Django基础

一、web框架分类和wsgiref模块使用介绍 web框架的本质 socket服务端 与 浏览器的通信 socket服务端功能划分: 负责与浏览器收发消息(socket通信) --> wsgiref/uWsgi/gunicorn... 根据用户访问...

ZeroBit
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部