python操作mysql数据库


Posted in Python onMarch 05, 2017

一、数据库基本操作

1. 想允许在数据库写中文,可在创建数据库时用下面命令

create database zcl charset utf8;

2. 查看students表结构

desc students;

3. 查看创建students表结构的语句

show create table students;

4. 删除数据库

drop database zcl;

5. 创建一个新的字段

alter table students add column nal char(64); 

PS: 本人是很讨厌上面这种“简单解释+代码”的博客。其实我当时在mysql终端写了很多的实例,不过因为当时电脑运行一个看视频的软件,导致我无法Ctrl+C/V。现在懒了哈哈~~

二、python连接数据库

python3不再支持mysqldb。其替代模块是PyMySQL。本文的例子是在python3.4环境。

1. 安装pymysql模块

pip3 install pymysql

2. 连接数据库,插入数据实例

import pymysql
#生成实例,连接数据库zcl
conn = pymysql.connect(host='127.0.0.1', user='root', passwd='root', db='zcl')
#生成游标,当前实例所处状态
cur = conn.cursor()
#插入数据
reCount = cur.execute('insert into students(name, sex, age, tel, nal) values(%s, %s, %s, %s, %s)',('Jack','man',25,1351234,"CN"))
reCount = cur.execute('insert into students(name, sex, age, tel, nal) values(%s, %s, %s, %s, %s)',('Mary','female',18,1341234,"USA"))
conn.commit() #实例提交命令 
cur.close()
conn.close()
print(reCount)

查看结果:

mysql> select* from students;
+----+------+-----+-----+-------------+------+
| id | name | sex | age | tel | nal |
+----+------+-----+-----+-------------+------+
| 1 | zcl | man | 22 | 15622341234 | NULL |
| 2 | alex | man | 30 | 15622341235 | NULL |
+----+------+-----+-----+-------------+------+
rows in set

3. 获取数据

import pymysql
conn = pymysql.connect(host='127.0.0.1', user='root', passwd='root', db='zcl')
cur = conn.cursor()
reCount = cur.execute('select* from students')
res = cur.fetchone() #获取一条数据
res2 = cur.fetchmany(3) #获取3条数据
res3 = cur.fetchall() #获取所有(元组格式)
print(res)
print(res2)
print(res3)
conn.commit()
cur.close()
conn.close()

输出:

(1, 'zcl', 'man', 22, '15622341234', None)
((2, 'alex', 'man', 30, '15622341235', None), (5, 'Jack', 'man', 25, '1351234', 'CN'), (6, 'Mary', 'female', 18, '1341234', 'USA'))
()

三、事务回滚

事务回滚是在数据写到数据库前执行的,因此事务回滚conn.rollback()要在实例提交命令conn.commit()之前。只要数据未提交就可以回滚,但回滚后ID却是自增的。请看下面的例子:

插入3条数据(注意事务回滚):

import pymysql
#连接数据库zcl
conn=pymysql.connect(host='127.0.0.1', user='root', passwd='root', db='zcl')
#生成游标,当前实例所处状态
cur=conn.cursor()
#插入数据
reCount=cur.execute('insert into students(name, sex, age, tel, nal) values(%s, %s, %s, %s, %s)', ('Jack', 'man', 25, 1351234, "CN"))
reCount=cur.execute('insert into students(name, sex, age, tel, nal) values(%s,%s,%s,%s,%s)', ('Jack2', 'man', 25, 1351234, "CN"))
reCount=cur.execute('insert into students(name, sex, age, tel, nal) values(%s, %s, %s, %s, %s)', ('Mary', 'female', 18, 1341234, "USA"))
conn.rollback() #事务回滚
conn.commit() #实例提交命令 
cur.close()
conn.close()
print(reCount)

未执行命令前与执行命令后(包含回滚操作)(注意ID号): 未执行上面代码与执行上面代码的结果是一样的!!因为事务已经回滚,故students表不会增加数据!

mysql> select* from students;
+----+------+--------+-----+-------------+------+
| id | name | sex | age | tel | nal |
+----+------+--------+-----+-------------+------+
| 1 | zcl | man | 22 | 15622341234 | NULL |
| 2 | alex | man | 30 | 15622341235 | NULL |
| 5 | Jack | man | 25 | 1351234 | CN |
| 6 | Mary | female | 18 | 1341234 | USA |
+----+------+--------+-----+-------------+------+
rows in set

执行命令后(不包含回滚操作):只需将上面第11行代码注释。

mysql> select* from students;
+----+-------+--------+-----+-------------+------+
| id | name | sex | age | tel | nal |
+----+-------+--------+-----+-------------+------+
| 1 | zcl | man | 22 | 15622341234 | NULL |
| 2 | alex | man | 30 | 15622341235 | NULL |
| 5 | Jack | man | 25 | 1351234 | CN |
| 6 | Mary | female | 18 | 1341234 | USA |
| 10 | Jack | man | 25 | 1351234 | CN |
| 11 | Jack2 | man | 25 | 1351234 | CN |
| 12 | Mary | female | 18 | 1341234 | USA |
+----+-------+--------+-----+-------------+------+
rows in set

总结:虽然事务回滚了,但ID还是自增了,不会因回滚而取消,但这不影响数据的一致性(底层的原理我不清楚~)

四、批量插入数据

import pymysql
#连接数据库zcl
conn = pymysql.connect(host='127.0.0.1', user='root', passwd='root', db='zcl')
#生成游标,当前实例所处状态
cur = conn.cursor()
li = [
 ("cjy","man",18,1562234,"USA"),
 ("cjy2","man",18,1562235,"USA"),
 ("cjy3","man",18,1562235,"USA"),
 ("cjy4","man",18,1562235,"USA"),
 ("cjy5","man",18,1562235,"USA"),
]
#插入数据
reCount = cur.executemany('insert into students(name,sex,age,tel,nal) values(%s,%s,%s,%s,%s)', li)
#conn.rollback() #事务回滚
conn.commit() #实例提交命令
cur.close()
conn.close()
print(reCount)

pycharm下输出: 5

mysql终端显示:

mysql> select* from students;   #插入数据前
+----+-------+--------+-----+-------------+------+
| id | name | sex | age | tel | nal |
+----+-------+--------+-----+-------------+------+
| 1 | zcl | man | 22 | 15622341234 | NULL |
| 2 | alex | man | 30 | 15622341235 | NULL |
| 5 | Jack | man | 25 | 1351234 | CN |
| 6 | Mary | female | 18 | 1341234 | USA |
| 10 | Jack | man | 25 | 1351234 | CN |
| 11 | Jack2 | man | 25 | 1351234 | CN |
| 12 | Mary | female | 18 | 1341234 | USA |
+----+-------+--------+-----+-------------+------+
rows in set


mysql> 
mysql> select* from students; #插入数据后
+----+-------+--------+-----+-------------+------+
| id | name | sex | age | tel | nal |
+----+-------+--------+-----+-------------+------+
| 1 | zcl | man | 22 | 15622341234 | NULL |
| 2 | alex | man | 30 | 15622341235 | NULL |
| 5 | Jack | man | 25 | 1351234 | CN |
| 6 | Mary | female | 18 | 1341234 | USA |
| 10 | Jack | man | 25 | 1351234 | CN |
| 11 | Jack2 | man | 25 | 1351234 | CN |
| 12 | Mary | female | 18 | 1341234 | USA |
| 13 | cjy | man | 18 | 1562234 | USA |
| 14 | cjy2 | man | 18 | 1562235 | USA |
| 15 | cjy3 | man | 18 | 1562235 | USA |
| 16 | cjy4 | man | 18 | 1562235 | USA |
| 17 | cjy5 | man | 18 | 1562235 | USA |
+----+-------+--------+-----+-------------+------+
rows in set

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Python 相关文章推荐
sublime text 3配置使用python操作方法
Jun 11 Python
利用python解决mysql视图导入导出依赖的问题
Dec 17 Python
python和shell获取文本内容的方法
Jun 05 Python
在Pandas中给多层索引降级的方法
Nov 16 Python
python开启debug模式的方法
Jun 27 Python
Django之使用celery和NGINX生成静态页面实现性能优化
Oct 08 Python
python计算波峰波谷值的方法(极值点)
Feb 18 Python
查看jupyter notebook每个单元格运行时间实例
Apr 22 Python
在pycharm中使用matplotlib.pyplot 绘图时报错的解决
Jun 01 Python
Python2.x与3​​.x版本有哪些区别
Jul 09 Python
Python Matplotlib简易教程(小白教程)
Jul 28 Python
自定义Django_rest_framework_jwt登陆错误返回的解决
Oct 18 Python
Windows安装Python、pip、easy_install的方法
Mar 05 #Python
python入门教程之识别验证码
Mar 04 #Python
python 链接和操作 memcache方法
Mar 04 #Python
快速实现基于Python的微信聊天机器人示例代码
Mar 03 #Python
Python实现在线音乐播放器
Mar 03 #Python
python开发简易版在线音乐播放器
Mar 03 #Python
详解python中requirements.txt的一切
Mar 03 #Python
You might like
Terran历史背景
2020/03/14 星际争霸
PHILIPS AE3805收音机的分析打磨
2021/03/02 无线电
php生成随机密码的三种方法小结
2010/09/04 PHP
php获取通过http协议post提交过来xml数据及解析xml
2012/12/16 PHP
PDO版本问题 Invalid parameter number: no parameters were bound
2013/01/06 PHP
Yii2 批量插入、更新数据实例
2017/03/15 PHP
PHP正则表达式处理函数(PCRE 函数)实例小结
2019/05/09 PHP
不用AJAX和IFRAME,说说真正意义上的ASP+JS无刷新技术
2008/09/25 Javascript
用JavaScript实现动画效果的方法
2013/07/20 Javascript
jquery easyui使用心得
2014/07/07 Javascript
JavaScript DSL 流畅接口(使用链式调用)实例
2015/03/15 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(二)
2016/02/16 Javascript
限制复选框最多选择项的实现代码
2016/05/30 Javascript
详解NodeJs支付宝移动支付签名及验签
2017/01/06 NodeJs
JS中Swiper的使用和轮播图效果
2017/08/11 Javascript
AngularJs 最新验证手机号码的实例,成功测试通过
2017/11/26 Javascript
[05:20]卡尔工作室_DOTA2新手教学_DOTA2超强新手功能
2013/04/22 DOTA
[01:08:29]DOTA2-DPC中国联赛定级赛 RNG vs Aster BO3第一场 1月9日
2021/03/11 DOTA
python开发之thread实现布朗运动的方法
2015/11/11 Python
python 3利用BeautifulSoup抓取div标签的方法示例
2017/05/28 Python
使用python 3实现发送邮件功能
2018/06/15 Python
详解Python的数据库操作(pymysql)
2019/04/04 Python
python按比例随机切分数据的实现
2019/07/11 Python
Python实现序列化及csv文件读取
2020/01/19 Python
python+requests接口压力测试500次,查看响应时间的实例
2020/04/30 Python
pytorch随机采样操作SubsetRandomSampler()
2020/07/07 Python
Python如何给函数库增加日志功能
2020/08/04 Python
详解Selenium 元素定位和WebDriver常用方法
2020/12/04 Python
Pytorch自定义Dataset和DataLoader去除不存在和空数据的操作
2021/03/03 Python
毕业生自荐书
2014/02/02 职场文书
大学生职业生涯规划书汇总
2014/03/20 职场文书
房产转让协议书
2014/04/11 职场文书
捐款倡议书格式范文
2014/05/14 职场文书
大学生学期个人总结
2015/02/12 职场文书
创业计划书之水果店
2019/07/18 职场文书
docker-compose部署Yapi的方法
2022/04/08 Servers