Python学习—数据库篇之pymysql
一、pymysql简介
对于Python操作MySQL主要使用两种方式:
- 原生模块 pymsql
- ORM框架 SQLAchemy
pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同。
二、简单使用
# -*- coding:utf-8 -*-
# author: cdc
# date: 2019/3/18 import pymysql # 创建连接
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='cdc19951216', db='test',charset='utf8')
# 创建游标
cursor = conn.cursor()
#执行sql操作
r = cursor.execute("insert into student(age,sex,class_no) values(16,'male',2)")
# r为执行sql语句后受影响的行数
print(r)
# 提交,不然无法保存新建或者修改的数据
conn.commit()
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
三、增删改查
增
# -*- coding:utf-8 -*-
# author: cdc
# date: 2019/3/18 import pymysql # 创建连接
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='cdc19951216', db='test',charset='utf8')
# 创建游标
cursor = conn.cursor() # 增加一行数据
cursor.execute("insert into tb1(name,part) values('cdc',1)") # 字符串拼接sql(禁止使用,会引起sql注入)
inp_1 = ('cdcy',2,)
sql = "insert into tb1(name,part) values('%s','%s')" % inp_1
cursor.execute(sql) # 带参数插入数据(推荐使用)
inp_2 = ('cdcx',2)
cursor.execute("insert into tb1(name,part) values(%s,%s)",inp_2) # 增加多行数据
lis = [('cdc1',2),
('cdc2',2),
('cdc3',2),
]
cursor.executemany("insert into tb1(name,part) values(%s,%s)",lis) # 提交,不然无法保存新建或者修改的数据
conn.commit()
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
插入数据
删
# -*- coding:utf-8 -*-
# author: cdc
# date: 2019/3/18 import pymysql # 创建连接
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='cdc19951216', db='test',charset='utf8')
# 创建游标
cursor = conn.cursor()
#执行sql操作
r = cursor.execute("delete from tb1 where name=%s",('alex',))
# r为执行sql语句后受影响的行数
print(r)
# 提交,不然无法保存新建或者修改的数据
conn.commit()
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
改
# -*- coding:utf-8 -*-
# author: cdc
# date: 2019/3/18 import pymysql # 创建连接
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='cdc19951216', db='test',charset='utf8')
# 创建游标
cursor = conn.cursor()
#执行sql操作
r = cursor.execute("update tb1 set name=%s where part=%s",('ccc',1,))
# r为执行sql语句后受影响的行数
print(r)
# 提交,不然无法保存新建或者修改的数据
conn.commit()
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
查
查新操作时,不需要执行commit操作
# -*- coding:utf-8 -*-
# author: cdc
# date: 2019/3/18 import pymysql # 创建连接
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='cdc19951216', db='test',charset='utf8')
# 创建游标
cursor = conn.cursor()
# 查询数据
cursor.execute('select * from tb3') # 展示一行
result = cursor.fetchone()
print(result)
result = cursor.fetchone()
print(result) # 展示多行
result = cursor.fetchmany(3)
print(result) # 展示全部
result = cursor.fetchall()
print(result)
pymysql查询操作
注意:fetch操作的机制类似于文件操作中的指针,会在上一次的展示基础位置上继续往下展示n行数据
# -*- coding:utf-8 -*-
# author: cdc
# date: 2019/3/18 import pymysql # 创建连接
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='cdc19951216', db='test',charset='utf8')
# 创建游标
cursor = conn.cursor()
# 查询数据
cursor.execute('select * from tb3') # 展示一行
result = cursor.fetchone()
print(result)
result = cursor.fetchone()
print(result) # 展示多行
result = cursor.fetchmany(3)
print(result) # ******************** 执行结果 ***************
"""
(1, 'cdc', 1)
(2, 'ccc', 1)
((3, 'ctt', 3), (4, 'lj', 4), (5, 'xx', 5))
"""
fetch数据时按照顺序进行,可以使用cursor.scroll(num,mode)来移动游标位置,如:
- cursor.scroll(n,mode='relative') # 相对当前位置移动,即从当前位置向前或者向后移动n个位置,再进行数据展示
- cursor.scroll(n,mode='absolute') # 相对绝对位置移动,即从当前位置回到n位置后,再进行数据的展示
# -*- coding:utf-8 -*-
# author: cdc
# date: 2019/3/18 import pymysql # 创建连接
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='cdc19951216', db='test',charset='utf8')
# 创建游标
cursor = conn.cursor()
# 查询数据
cursor.execute('select * from tb3') # 展示一行
result = cursor.fetchone()
print(result)
result = cursor.fetchone()
print(result) # 向前移动一个位置
"""
(1, 'cdc', 1)
(2, 'ccc', 1)
(2, 'ccc', 1)
"""
cursor.scroll(-1,mode='relative') # 向后移动一个位置
"""
(1, 'cdc', 1)
(2, 'ccc', 1)
(4, 'lj', 4) """
cursor.scroll(1,mode='relative')
result = cursor.fetchone()
print(result)
此外,fetch操作默认获取的数据是元祖类型,如果想要或者字典类型的数据,可以通过改变游标的方式实现:
# -*- coding:utf-8 -*-
# author: cdc
# date: 2019/3/18 import pymysql # 创建连接
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='cdc19951216', db='test',charset='utf8')
# 创建游标
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 查询数据
cursor.execute('select * from tb3') # 展示全部
result = cursor.fetchall()
print(result) # ********* 执行结果 ************
"""
[{'part_no': 1, 'name': 'cdc', 'no': 1}, {'part_no': 1, 'name': 'ccc', 'no': 2}, {'part_no': 3, 'name': 'ctt', 'no': 3}, {'part_no': 4, 'name': 'lj', 'no': 4}, {'part_no': 5, 'name': 'xx', 'no': 5}, {'part_no': 9, 'name': 'cc', 'no': 6}, {'part_no': 5, 'name': 'fdc', 'no': 7}]
"""
其他操作
# 注:必须得有自增列 import pymysql # 创建连接
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='cdc19951216', db='test',charset='utf8')
# 创建游标
cursor = conn.cursor()
# 查询数据
cursor.execute('insert into class(address) values(%s)',('class_3',)) new_id = cursor.lastrowid
print(new_id)
获取最新自增ID
Python学习—数据库篇之pymysql的更多相关文章
- Python学习—数据库篇之SQL补充
一.SQL注入问题 在使用pymysql进行信息查询时,推荐使用传参的方式,禁止使用字符串拼接方式,因为字符串拼接往往会带来sql注入的问题 # -*- coding:utf-8 -*- # auth ...
- Python学习—数据库篇之索引
一.索引简介 索引,是数据库中专门用于帮助用户快速查询数据的一种数据结构.类似于字典中的目录,查找字典内容时可以根据目录查找到数据的存放位置,然后直接获取即可,对于索引,会保存在额外的文件中.在mys ...
- Python学习—数据库篇之练习题
Mysql测试题 一.表关系 请创建如下表,并创建相关约束 二.操作表 0.在成绩表中同时显示出对应的课程名和学生名 1.自行创建测试数据 2.查询“生物”课程比“物理”课程成绩高的所有学生的学号: ...
- Python学习—数据库篇之SQL语句
一.数据库级别 1.显示数据库 show databases; 默认数据库: mysql - 用户权限相关数据 test - 用于用户测试数据 information_schema - MySQL本身 ...
- Python学习—数据库篇之初识mysql
一.下载与安装 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司.MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好 ...
- Python学习第一篇
好久没有来博客园了,今天开始写自己学习Python和Hadoop的学习笔记吧.今天写第一篇,Python学习,其他的环境部署都不说了,可以参考其他的博客. 今天根据MachineLearning里面的 ...
- [Python学习]错误篇二:切换当前工作目录时出错——FileNotFoundError: [WinError 3] 系统找不到指定的路径
REFERENCE:<Head First Python> ID:我的第二篇[Python学习] BIRTHDAY:2019.7.13 EXPERIENCE_SHARING:解决切换当前工 ...
- [Python学习]错误篇一
REFERENCE:<Head First Python> ID:我的第一篇[Python学习] BIRTHDAY:2019.7.6 EXPERIENCE_SHARING:两个程序错误类型 ...
- python学习 —— python3简单使用pymysql包操作数据库
python3只支持pymysql(cpython >= 2.6 or >= 3.3,mysql >= 4.1),python2支持mysqldb. 两个例子: import pym ...
随机推荐
- 正则求解@" (?<=^\[length=)(\d+)(?=\])"
举个例子 [length=1548]这个正则 就是匹配 length的值了(1548)(?<=exp)匹配之后的(?=exp)匹配表达式之前的^是边界,在行首例如 aa[length=1548] ...
- PyCharm激活(License server)
打开激活窗口 选择 Activate new license with: License server (用license server 激活) 在 License sever address 处填入 ...
- SQL SERVER2008 数据库日志文件的收缩方法
最近公司的数据库随着业务量的增多,日志文件巨大(超过300G),造成磁盘空间不够用,进而后来的访问数据库请求无法访问. 网上类似的方法也很多,但不可行,如下是我实践过,可行的,将日志文件收缩至任意指定 ...
- C# 6.0:String Interpolation
在开发中经常需要对字符串进行格式化处理.我们一般使用String.Format()方法,它会将指定字符串中的每个格式项替换为相应对象的值的文本等效项.虽然这很普通,但有时会容易使人迷惑并造成错误.因为 ...
- Jquery Mobile 让错误提示可在后台控制显示内容
在jquery.mobile-1.4.5.min.js的5254行找到下面代码 return $.proxy(function( xhr, textStatus, errorThrown ) { 然后 ...
- LeetCode【108. 将有序数组转换为二叉搜索树】
又是二叉树,最开始都忘记了二叉搜索树是什么意思,搜索了一下: 二叉搜索树:左节点都小于右节点,在这里就可以考虑将数组中的中间值作为根节点 平衡二叉树:就是左右节点高度不大于1 树就可以想到递归与迭代, ...
- 关于Unity单个对象多个脚本的Update调用的时序问题
先说几句废话, 最近在研究Unity, 这玩意用起来比较简单, 而且商店里还有各种插件, 初学者也能轻松拼凑出一个像模像样的游戏(顺便说一句,自己做着玩就无所谓了,但随便拼凑个辣鸡丢出来骗钱就不好了) ...
- Win 10更新版1709有哪些新功能值得关注!
windows 10秋季创意者更新版1709发布已经有段时间了,也有很多用户选择升级这次更新的系统.那么,这次Win 10 更新版1709有哪些新功能值得关注呢?下面,一起随主机吧来看一看吧! 1. ...
- 三、CSS样式——列表
概念: CSS列表属性允许你放置.改变列表标志,或者将图像作为列表项标志 属性 描述 list-style 简写列表项 list-style-image 列表项图像 list-style-positi ...
- Docker笔记——搭建私有仓
Docker Hub当然是首选镜像仓,如果不想对所有人公开只想在局域网或公司内部使用,则有必要搭建私有仓来存储分发镜像. 搭建私有仓当然可以直接运行以下命令来创建个registry容器: docker ...