pymysql连接和操作Mysql数据库
pymysql
一、概要
PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,
二、PyMySQL 安装
pip install pymysql
三、操作流程
- 创建connection
- 获取cursor
- 执行增删改查的操作
- 处理数据
- 关闭cursor
- 关闭connection
四、核心类介绍
1、创建connection
说明
语法格式
conn = pymysql.connect(host=None, user=None, password="",
database=None, port=0, db=None,charset='')常用参数说明
参数名 类型 说明 host String MySQL的服务器地址 port int MySQL的端口号 user String 用户名 passwd String 密码 db String 使用的数据库 charset String 连接字符集 返回值
cursor
示例代码
HOST = '127.0.0.1'
PORT = 3306
USER = 'root'
PASSWD = 'root'
DB = 'python'
CHARSET = 'utf8' connection = pymysql.connect(host=HOST,
port=PORT,
user=USER,
passwd=PASSWD,
db=DB,
charset=CHARSET)其它方法
方法 描述 begin() 开启事务 commit() 提交事务 cursor(cursor=None) 创建一个游标用来执行语句 ping(reconnect=True) 检查连接是否存活,会重新发起连接 rollback() 回滚事务 close() 关闭连接 select_db(db) 选择数据库 show_warnings() 查看warning信息 详细
- host – 数据库服务器所在的主机。
- user – 登录用户名。
- password – 登录用户密码。
- database – 连接的数据库。
- port – 数据库开放的端口。(默认: 3306)
- bind_address – 当客户端有多个网络接口时,请指定连接到主机的接口,参数可以是主机名或IP地址。
- unix_socket – 使用unix套接字而不是tcp/ip。
- charset – 连接字符集。
- sql_mode – 默认SQL模式。
- read_default_file – 指定my.cnf文件路径,以便从[client]部分读取参数。
- conv – 要使用的转换字典,而不是默认值。
- use_unicode – 是否默认为unicode字符串,对于Py3k,此选项默认为true。
- client_flag – 发送到MySQL的自定义标志。
- cursorclass – 使用自定义的游标类。
- init_command – 建立连接时要运行的初始SQL语句。
- connect_timeout – 建立连接超时时间。(默认: 10,最小: 1,最大: 31536000)
- read_default_group – 从配置文件中读取组。
- compress – 不支持
- named_pipe – 不支持
- autocommit – 设置自动提交模式,不设置意味着使用数据库默认。(默认值: False)
- local_infile – 是否启用“LOAD LOCAL INFILE”命令的使用。(默认值: False)
- max_allowed_packet – 发送到服务器的数据包的最大大小 (以字节为单位,默认值: 16MB),仅用于限制小于默认值 (16KB) 的 “LOAD LOCAL INFILE” 数据包的大小。
- defer_connect – 不要显式连接建设,等待连接调用。(默认值: False)
- db – 连接数据库别名(兼容MySQLdb)
- passwd – 密码输入别名(兼容MySQLdb)
- binary_prefix – 在bytes和bytearray上添加_binary前缀(默认: False)
2、获取cursor对象
说明
游标对象,用于执行查询和获取结果
核心方法
方法名 说明 execute() 用于执行一个数据库的查询命令 fetchone() 获取结果集中的下一行 fetchmany(size) 获取结果集中的下(size)行 fetchall() 获取结果集中剩下的所有行 rowcount 最近一次execute返回数据/影响的行数 close() 关闭游标 举个栗子
1、执行查询功能
with connection.cursor() as cursor:
sql = 'select * from home_user'
cursor.execute(sql)
results = cursor.fetchall()
connection.commit()
for results in results:
uid = results[0]
name = results[1]
password = results[2]
print('==========用户信息===============')
print('用户id: {id} \n用户名: {name}\n密码: {pwd}'.format(id=uid, name=name, pwd=password))详细
方法 描述 close() 关闭游标。 execute(query, args=None) 执行单条语句,传入需要执行的语句,是string类型;同时可以给查询传入参数,参数可以是tuple、list或dict。执行完成后,会返回执行语句的影响行数,如果有的话。 executemany(query, args) 执行多条INSERT语句,传入需要执行的语句;同时可以给查询传入参数,参数是一个mappings序列。执行完成后,会返回执行语句的影响行数,如果有的话。 fetchone() 获取下一行数据。 fetchall() 获取所有数据。 fetchmany(size=None) 获取几行数据。 read_next() 获取下一行数据。 callproc() 用来调用存储过程。 mogrify() 参数化查询,防止SQL注入。 scroll(num,mode) 移动游标位置。
五、基本操作
查询数据
分页查询操作
def find_by_page(page, size):
with pymysql.connect(host=HOST,
port=PORT,
user=USER,
passwd=PASSWORD,
charset=CHARSET,
db=DB_NAME) as cursor:
sql = "SELECT * FROM t_addr LIMIT{},{}".format((page - 1) * size, size)
cursor.execute(sql)
user = cursor.fetchall()
事务操作
示例代码
conn = pymysql.connect(
host='10.10.0.109',
port=3306,
user='mha',
password='123456',
database='sbtest',
charset='utf8'
) cursor = conn.cursor() # 插入sql;
sql_insert = "insert into t_user (userid,username) values (10,'user10')"
# 更新sql;
sql_update = "update t_user set username = 'name91' where userid=9"
# 删除sql;
sql_delete = "delete from t_user where userid < 3" # 把一个事务放到一个try块里,如果出现异常就回滚;
try:
# 开启事务;
conn.begin() cursor.execute(sql_insert)
print(cursor.rowcount) cursor.execute(sql_update)
print(cursor.rowcount) cursor.execute(sql_delete)
print(cursor.rowcount) # 提交事务;
conn.commit() except Exception as e:
# 若有异常就回滚;
conn.rollback() cursor.close()
conn.close()
批量插入
示例代码
# 测试事务 批量添加
def test_batch_insert():
conn = pymysql.connect(host=HOST,
port=PORT,
user=USER,
passwd=PASSWORD,
charset=CHARSET,
db=DB_NAME)
cursor = conn.cursor()
try:
sql = 'INSERT INTO t_addr(PROVICE, CITY, COUNTY, DEATIL, USERID) VALUES (%s,%s,%s,%s,%s)'
li = []
for i in range(50):
li.append(('湖北省', '武汉市', '高新区' + str(i), '智慧园2135', 6))
# 开启事物
conn.begin()
cursor.executemany(sql, li)
# 提交
conn.commit()
except Exception as e:
conn.rollback()
print(e)
# 报错事务回滚
finally:
# 关闭连接
cursor.close()
conn.close()
pymysql连接和操作Mysql数据库的更多相关文章
- robot_framewok自动化测试--(9)连接并操作 MySql 数据库
连接并操作 MySql 数据库 1.mysql数据库 1.1安装mysql数据库 请参考我的另一篇文章:MYSQL5.7下载安装图文教程 1.2.准备测试数据 请参考我的另一篇文章:Mysql基础教程 ...
- spring boot ----> jpa连接和操作mysql数据库
环境: centos6.8,jdk1.8.0_172,maven3.5.4,vim,spring boot 1.5.13,mysql-5.7.23 1.引入jpa起步依赖和mysql驱动jar包 &l ...
- php连接和操作mysql数据库
<?php //数据库连接文件:link.php $link = mysql_connect("localhost", "root", "&qu ...
- python3操作数据库 借助pycharm快速连接并操作mysql数据库
1.https://blog.csdn.net/qiushi_1990/article/details/78041299
- python3操作MySQL数据库
安装PyMySQL 下载地址:https://pypi.python.org/pypi/PyMySQL 1.把操作Mysql数据库封装成类,数据库和表先建好 import pymysql.cursor ...
- Python MySQLdb模块连接操作mysql数据库实例_python
mysql是一个优秀的开源数据库,它现在的应用非常的广泛,因此很有必要简单的介绍一下用python操作mysql数据库的方法.python操作数据库需要安装一个第三方的模块,在http://mysql ...
- python 之操作mysql 数据库实例
对于python操作mysql 数据库,具体的步骤应为: 1. 连接上mysql host 端口号 数据库 账号 密码2. 建立游标3. 执行sql(注意,如果是update,insert,delet ...
- python接口自动化(三十八)-python操作mysql数据库(详解)
简介 现在的招聘要求对QA人员的要求越来越高,测试的一些基础知识就不必说了,来说测试知识以外的,会不会一门或者多门开发与语言,能不能读懂代码,会不会Linux,会不会搭建测试系统,会不会常用的数据库, ...
- Python操作MySQL数据库(步骤教程)
我们经常需要将大量数据保存起来以备后续使用,数据库是一个很好的解决方案.在众多数据库中,MySQL数据库算是入门比较简单.语法比较简单,同时也比较实用的一个.在这篇博客中,将以MySQL数据库为例,介 ...
随机推荐
- Shell 脚本语法
条件测试:test 和 [ 命令 test 或 [ 可以测试一个条件是否成立,如果测试结果为真,则该命令的Exit Status为0,如果测试结果为假,则命令的Exit Status为1(注意与C ...
- xgzc— math 专题训练(二)
费马小定理&欧拉定理 费马小定理: 如果\(p\)是一个质数,而整数\(a\)不是\(p\)的倍数,\(a^{p-1}\equiv1\pmod p\) 欧拉定理: 当\(a\)与\(n\)互质 ...
- 卷积理论 & 高维FWT学习笔记
之前做了那么多生成函数和多项式卷积的题目,结果今天才理解了优化卷积算法的实质. 首先我们以二进制FWT or作为最简单的例子入手. 我们发现正的FWT or变换就是求$\hat{a}_j=\sum_{ ...
- 通过zabbix来监控树莓派
安装zabbix-agent(4.0版本) 配置zabbix-agent(使用主动模式) 使用zabbix-sender(主动推送自定义数据) 以下 执行命令和相关配置文件: wget https:/ ...
- P1582 倒水,P2158 [SDOI2008]仪仗队——数学,二进制
有n个瓶子,里面都有一升水,但是只想保留k个瓶子,只能两个瓶子里面的水体积相等时才能倒在一个瓶子里:不能丢弃有水的瓶子:瓶子容量无限: 问需要购买几个额外的瓶子才能满足条件: 因为每个瓶子一开始只有一 ...
- Ubuntu 14.04 tar 打包系统安装到新机器
制作Ubuntu14.04 的u启动盘,重启电脑进入要克隆的系统,打包整个根目录 su cd / tar -cvpzf /media/cdrom/backup.tar.gz / --exclude=/ ...
- [shell]如何测试shell脚本,保证正确
如何用最快最有效的方式进行测试? 很多开发的习惯是,二话不说,写完/拿到,就跑一把,看看输入,输出,想要的操作是否完成,也就过了. 其实这是十分不严谨的,若是未经过QA,风险还是相当大的. 以下即sh ...
- CF1217A
CF1217A 题意: 配exp点经验给力量str和智力int,求有多少种分配情况使str比int高 解法: 打表找规律,没了. CODE; #include <bits/stdc++.h> ...
- abd shell pm list packages
abd shell pm list packages ####查看当前连接设备或者虚拟机的所有包 adb shell pm list packages -d #####只输出禁用的包. adb she ...
- golang gorm框架的默认时区问题
gorm框架的时区是在连接数据库时设置的, 如下