python之pymysql
PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。
安装:
- pip3 install PyMySQL
常用参数:
pymysql.Connect() 参数说明
host(str) mysql服务器地址
port(int) 端口
user(str) 用户名
passwd(str) 密码
db(str) 数据库名称
charset(str) 链接编码
connection() 对象支持的方法
cursor() 使用该链接创建并返回游标
commit() 提交当前事务
rollback() 回滚当前事务
close() 关闭链接
curser()对象支持的方法
execute(op) 执行一个数据库的查询命令
fetchone() 取得结果集的下一行
fetchmany(size) 获取结果集的下几行
fetchall() 获取结果集中的所有行
rowcount() 返回数据条数或影响行数
close() 关闭游标对象
lastrowid 获取自增ID
连接数据库;
- import pymysql
- connect = pymysql.Connect(
- host = 'localhost',
- port = ,
- user = 'root',
- passwd = '',
- db = 'python',
- charset = 'utf8',
- cursorclass = pymysql.cursors.DictCursor // 指定类型
- )
- //获取游标
- cursor = connect.cursor()
插入数据:
- sql = "INSERT INTO trade (name, account, saving) VALUES ( '%s', '%s', %.2f )"
- data = ('雷军', '', )
- cursor.execute(sql % data)
- connect.commit()
- print('成功插入', cursor.rowcount, '条数据')
- // 获取插入的ID(一定要在commit之前获取)
last_id = curs.lastrowid
修改数据:
- sql = "UPDATE trade SET saving = %.2f WHERE account = '%s' "
- data = (, '')
- cursor.execute(sql % data)
- connect.commit()
- print('成功修改', cursor.rowcount, '条数据')
查询数据:
- sql = "SELECT name,saving FROM trade WHERE account = '%s' "
- data = ('',)
- cursor.execute(sql % data)
- for row in cursor.fetchall():
- print("Name:%s\tSaving:%.2f" % row)
- print('共查找出', cursor.rowcount, '条数据')
- # 返回结果是一个字典类型数据
删除数据:
- sql = "DELETE FROM trade WHERE account = '%s' LIMIT %d"
- data = ('', )
- cursor.execute(sql % data)
- connect.commit()
- print('成功删除', cursor.rowcount, '条数据')
事务处理:
- sql_1 = "UPDATE trade SET saving = saving + 1000 WHERE account = '18012345678' "
- sql_2 = "UPDATE trade SET expend = expend + 1000 WHERE account = '18012345678' "
- sql_3 = "UPDATE trade SET income = income + 2000 WHERE account = '18012345678' "
- try:
- cursor.execute(sql_1) # 储蓄增加1000
- cursor.execute(sql_2) # 支出增加1000
- cursor.execute(sql_3) # 收入增加2000
- except Exception as e:
- connect.rollback() # 事务回滚
- print('事务处理失败', e)
- else:
- connect.commit() # 事务提交
- print('事务处理成功', cursor.rowcount)
- # 关闭连接
- cursor.close()
- connect.close()
游标控制
所有的数据查询操作均基于游标,我们可以通过cursor.scroll(num, mode)
控制游标的位置。
- cursor.scroll(, mode='relative') # 相对当前位置移动
- cursor.scroll(, mode='absolute') # 相对绝对位置移动
设置游标类型
查询时,默认返回的数据类型为元组,可以自定义设置返回类型。支持5种游标类型:
- Cursor: 默认,元组类型
- DictCursor: 字典类型
- DictCursorMixin: 支持自定义的游标类型,需先自定义才可使用
- SSCursor: 无缓冲元组类型
- SSDictCursor: 无缓冲字典类型
无缓冲游标类型,适用于数据量很大,一次性返回太慢,或者服务端带宽较小时。
事务处理
开启事务
connection.begin()
提交修改
connection.commit()
回滚事务
connection.rollback()
防 SQL 注入
转义特殊字符 connection.escape_string(str)
参数化语句 支持传入参数进行自动转义、格式化 SQL 语句,以避免 SQL 注入等安全问题。
- # 插入数据(元组或列表)
- effect_row = cursor.execute('INSERT INTO `users` (`name`, `age`) VALUES (%s, %s)', ('mary', ))
- # 插入数据(字典)
- info = {'name': 'fake', 'age': }
- effect_row = cursor.execute('INSERT INTO `users` (`name`, `age`) VALUES (%(name)s, %(age)s)', info)
- # 批量插入
- effect_row = cursor.executemany(
- 'INSERT INTO `users` (`name`, `age`) VALUES (%s, %s) ON DUPLICATE KEY UPDATE age=VALUES(age)', [
- ('hello', ),
- ('fake', ),
- ])
示例:
1. 执行SQL
- cursor = connection.cursor()
- # 创建数据表
- effect_row = cursor.execute('''
- CREATE TABLE `users` (
- `name` varchar() NOT NULL,
- `age` int() unsigned NOT NULL DEFAULT '',
- PRIMARY KEY (`name`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8
- ''')
- # 插入数据(元组或列表)
- effect_row = cursor.execute('INSERT INTO `users` (`name`, `age`) VALUES (%s, %s)', ('mary', ))
- # 插入数据(字典)
- info = {'name': 'fake', 'age': }
- effect_row = cursor.execute('INSERT INTO `users` (`name`, `age`) VALUES (%(name)s, %(age)s)', info)
- connection.commit()
- # 获取游标
- cursor = connection.cursor()
- # 批量插入
- effect_row = cursor.executemany(
- 'INSERT INTO `users` (`name`, `age`) VALUES (%s, %s) ON DUPLICATE KEY UPDATE age=VALUES(age)', [
- ('hello', ),
- ('fake', ),
- ])
- connection.commit()
注意: INSERT,UPDATE,DELETE等修改操作,需要手动执行commit()完成对数据的修改提交
2.查询数据
- # 执行查询 SQL
- cursor.execute('SELECT * FROM `users`')
- # 获取单条数据
- cursor.fetchone()
- # 获取前N条数据
- cursor.fetchmany()
- # 获取所有数据
- cursor.fetchall()
常见问题:
1.
- pymysql.err.ProgrammingError: (, 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'fas好",\'wozhidaole知道了\'" where title = "好"\' at line 1')
字符串中出现引号,导致SQL语句发生错误,需要进行转义
- pymysql.escape_string(str)
python之pymysql的更多相关文章
- python之pymysql模块学习(待完善...)
pymysql介绍 pymysql是在python3.x版本中用于连接mysql服务器的一个库.python2中则使用mysqldb. 安装方法: pip install pymysql 使用实例: ...
- python的pymysql模块简介
一.介绍 在python中用pymysql模块来对mysql进行操作,该模块本质就是一个套接字客户端软件,使用前需要事先安装 pip3 install pymysql 二.操作简介 import py ...
- python中pymysql使用
python中pymysql使用 https://blog.csdn.net/johline/article/details/69549131 import pymysql # 连接数据库 conne ...
- Python进阶----pymysql的安装与使用,mysql数据库的备份和恢复,mysql的事务和锁
Python进阶----pymysql的安装与使用,mysql数据库的备份和恢复,mysql的事务和锁 一丶安装 pip install PyMySQL 二丶pymysql连接数据库 ### 语法: ...
- Python进阶----pymysql模块的使用,单表查询
Python进阶----pymysql模块的使用,单表查询 一丶使用pymysql 1.下载pymysql包: pip3 install pymysql 2.编写代码 ...
- Python 之 PyMySQL 安装和使用
Python具有内置的SQLite支持. 在本节中,我们将学习使用MySQL的相关概念和知识. 在早期Python版本一般都使用MySQLdb模块,但这个MySQL的流行接口与Python 3不兼容. ...
- Python中pymysql基本使用
Python中pymysql模块通过获取mysql数据库命令行游标执行数据库命令来进行数据库操作 优点:操作数据库语句所见即所得,执行了什么数据库语句都很清楚 缺点:操作繁琐,代码量多 1. pymy ...
- mac多版本python安装 pymysql
系统里面安装了多个python的版本,有2.7和3.4等.默认的2.7版本,但我开发需要3.4版本的. 默认情况下,用pip安装PyMySQL $sudo pip install PyMySQL 安装 ...
- python模块-----pymysql
一.安装 本模块为python第三方模块,需要单独安装.作用为调用mysql接口执行模块 pip3 install pyMySql 操作步骤: #!/usr/bin/python3 import py ...
- python的pymysql使用方法【转】
前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持3.x版本. 本文测试python版本:2.6.6.m ...
随机推荐
- [论文理解] Acquisition of Localization Confidence for Accurate Object Detection
Acquisition of Localization Confidence for Accurate Object Detection Intro 目标检测领域的问题有很多,本文的作者捕捉到了这样一 ...
- Spring AOP增强(Advice)
Sring AOP通过PointCut来指定在那些类的那些方法上织入横切逻辑,通过Advice来指定在切点上具体做什么事情.如方法前做什么,方法后做什么,抛出异常做什么. Spring中有两种方式定义 ...
- electron关于无边框窗口无法拖拽移动以及点击事件失效的问题
为了使窗口无边框,使得在某些时候让项目看起来更美观,所以在创建窗口的时候通过设置 frame 属性的值为 false 来创建无边框窗口.但是无边框窗口会产生无法移动的问题,对于这个问题我们可以在渲染进 ...
- javascript之注册事件
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- ViewGroup的事件机制
根据View的事件机制,再添加在代码中添加一个自定义的LinearLayout,继承LinearLayout,然后复写了与事件分发机制有关的方法,日志输出 import android.content ...
- 学习Oracle数据库入门到精通教程资料合集
任何大型信息系统,都需要有数据库管理系统作为支撑.其中,Oracle以其卓越的性能获得了广泛的应用.本合集汇总了学习Oracle数据库从入门到精通的30份教程资料. 资料名称 下载地址 超详细Orac ...
- C++中 关于操作符的重载
C++实现了类的定义,也可以对类之间的操作符进行定义,又叫重载. 例如同类之间的 加.减法,赋值等等操作. 具体看http://blog.csdn.net/zhy_cheng/article/deta ...
- 关于web技术的一些见解
在目前的软件技术领域中,互联网方面的技术是其中最热门的一部分.现在做一个普通的网站,就涉及到大部分的web技术了:前端展示,后端数据处理,功能模块等.我觉得,也就分两个部分的技术:前端,后端. 前端, ...
- HashMap 的实现原理解析(转载)
HashMap 概述 HashMap 是基于哈希表的 Map 接口的非同步实现.此实现提供所有可选的映射操作,并允许使用 null 值和 null 键.此类不保证映射的顺序,特别是它不保证该顺序恒久不 ...
- openstack共享组件--memcache缓存(2)
一.缓存系统 一.静态web页面: 1.在静态Web程序中,客户端使用Web浏览器(IE.FireFox等)经过网络(Network)连接到服务器上,使用HTTP协议发起一个请求(Request),告 ...