前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python MySQLdb 模块

python MySQLdb 模块

作者头像
py3study
发布2020-01-07 16:32:16
1.2K0
发布2020-01-07 16:32:16
举报
文章被收录于专栏:python3

  用python操作mysql数据库,就会用到MySQLdb模块,这个模块其实和文件数据库SQLite的操作方式一样的

先来看一下这模块的简单实用

插入数据

代码语言:javascript
复制
import MySQLdb
#创建一个mysql的连接对象  
conn = MySQLdb.connect(host='127.0.0.1',user='root',passwd='1234',db='mydb')
#创建操作游标,一切对数据库的操作都是调用游标里的方法  
cur = conn.cursor()
"""
这里要注意,和其他模块不同的就是value里面参数的占位符,在mysql里面不管要value的值是什么类型,占位符只有%s一种模式。这要切记~~!! 
""" 
reCount =cur.execute('insert into UserInfo(Name,age) values(%s,%s)',('alex',18))
#执行插入语句会返回成功插入的条目数。可以将这个条目数打印出来
print reCount
conn.commit()  
cur.close()
conn.close()

这段代码有点数据库基础的的就可以看懂,其实就是在cur.execute()方法的括号里写入要执行的sql语句就好了。

如果有多条语句需要插入,最简单的使用for循环的方式插入数据。但是模块自带了executemany方法可以更加方便的实现多条语句同时插入的功能

代码语言:javascript
复制
import MySQLdb
conn = MySQLdb.connect(host='127.0.0.1',user='root',passwd='1234',db='mydb')
cur = conn.cursor()
#以元组为单位,存入要插入的values值
li =[
     ('alex','usa'),
     ('sb','usa'),
]
#这里改成调用executemany()方法一次操作多条数据
reCount = cur.executemany('insert into UserInfo(Name,Address) values(%s,%s)',li)
conn.commit()
cur.close()
conn.close()
print reCount

查询操作是我们最常用的数据库操作,模块也为我们提供了很多选项

查询操作

代码语言:javascript
复制
import MySQLdb
conn = MySQLdb.connect(host='192.168.10.105',user='wgw',passwd='123456',db='wgwtest')
cur = conn.cursor()
reCount = cur.execute('select * from user_list')
#通过fetchone方法获取一条结果
print cur.fetchone()
print 'select %s lins'%reCount

上面的代码执行结果是

代码语言:javascript
复制
(1L, 1L, 'wgw', '123456', 0L)
select 3 lins

返回的统计结果是查询到了3条数据,我们只获得了一条。这是怎么回事?这是因为我们使用了fetchone方法。这个方法不管查询了多少条数据,它只取第一条。另外我们看到查询结果里面的有很多的L,这个L是表示我们查询出来的数字类型是Long int 长×××的。

那如果我们要获取所有的查询结果怎么办呢?那就用fetchall()方法

代码语言:javascript
复制
#!/usr/bin/env python
# -*-coding:utf-8-*-
import MySQLdb
conn = MySQLdb.connect(host='192.168.10.105',user='wgw',passwd='123456',db='wgwtest')
cur = conn.cursor()
reCount = cur.execute('select * from user_list')
#通过fetchall方法获取全部结果
print cur.fetchall()
print 'select %s lins'%reCount

这次的执行结果如下

代码语言:javascript
复制
((1L, 1L, 'wgw', '123456', 0L), (2L, 2L, 'alex', '123456', 1L), (3L, 3L, 'eric', '123456', 0L))
select 3 lins

这样就查询出来了所有数据条目,fetchall的运行结果是用一个大的元组包含了所有的数据条目,其中每一个数据条目都用一个小元组表示。但是这种元组套元组的方式也很麻烦。比如我们要取用户名的字段值,那需要对元组的内容进行切片,先切大的再切小的。是不是很麻烦?这个我们也有办法解决。问题就是处在游标对象身上

我们创建游标的对象的时候用的语句是

代码语言:javascript
复制
cur = conn.cursor()

这种模式,默认获取的结果都以元组形式展现。我们现在换一种创建对象的方法

代码语言:javascript
复制
cur = conn.cursor(cursorclass = MySQLdb.cursors.DictCursor)

这种方式指定了游标以字典的形式返回数据,我们来看看效果。

先看看fetchone

代码语言:javascript
复制
#!/usr/bin/env python
# -*-coding:utf-8-*-
import MySQLdb
conn = MySQLdb.connect(host='192.168.10.105',user='wgw',passwd='123456',db='wgwtest')
#cur = conn.cursor()
#指定游标的数据返回类型
cur = conn.cursor(cursorclass = MySQLdb.cursors.DictCursor)
reCount = cur.execute('select * from user_list')
#通过fetchall方法获取全部结果
print cur.fetchall()
print 'select %s lines'%reCount

运行结果如下

代码语言:javascript
复制
{'tid': 1L, 'passwd': '123456', 'login_count': 0L, 'uid': 1L, 'name': 'wgw'}
select 3 lines

返回的查询结果变成字典形式了,字典的key就是字段名称,value就是我们查询的字段值。这样我们通过fetchone['name']这可以获得用户名。别切片方式省事多了

再看看fetchall的效果

代码语言:javascript
复制
#!/usr/bin/env python
# -*-coding:utf-8-*-
import MySQLdb
conn = MySQLdb.connect(host='192.168.10.105',user='wgw',passwd='123456',db='wgwtest')
#cur = conn.cursor()
#指定游标的数据返回类型
cur = conn.cursor(cursorclass = MySQLdb.cursors.DictCursor)
reCount = cur.execute('select * from user_list')
#通过fetchall方法获取全部结果
print cur.fetchall()
print 'select %s lines'%reCount

运行结果如下:

代码语言:javascript
复制
({'tid': 1L, 'passwd': '123456', 'login_count': 0L, 'uid': 1L, 'name': 'wgw'}, {'tid': 2L, 'passwd': '123456', 'login_count': 1L, 'uid': 2L, 'name': 'alex'}, {'tid': 3L, 'passwd': '123456', 'login_count': 0L, 'uid': 3L, 'name': 'eric'})
select 3 lines

看结果每个数据条目的内容已经用字典表示了,但是fetchall()方法还是会在结果最外层加个元组封装。这是没办法的事情了,但那也比最原始的模式要好操作的多。

使用MySQLdb模块,个人的感觉就3点

1、游标的获取类型指定为字典类型

2、如果查询结果只有一条就用fetchone()方法,这样可以少处理一层元组

3、好好学学数据库SQL语言,这个模块的核心还是调用数据库的SQL实现的。SQL写的不行其他的都白瞎了

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/09/15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档