文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python MySQLdb 模块

2023-01-31 06:36

关注

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

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

插入数据

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方法可以更加方便的实现多条语句同时插入的功能

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


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

查询操作

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

上面的代码执行结果是

(1L, 1L, 'wgw', '123456', 0L)
select 3 lins

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


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

#!/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

这次的执行结果如下

((1L, 1L, 'wgw', '123456', 0L), (2L, 2L, 'alex', '123456', 1L), (3L, 3L, 'eric', '123456', 0L))
select 3 lins

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


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

cur = conn.cursor()

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

cur = conn.cursor(cursorclass = MySQLdb.cursors.DictCursor)

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

先看看fetchone

#!/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

运行结果如下

{'tid': 1L, 'passwd': '123456', 'login_count': 0L, 'uid': 1L, 'name': 'wgw'}
select 3 lines

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


再看看fetchall的效果

#!/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

运行结果如下:

({'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写的不行其他的都白瞎了

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯