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 相关文章推荐
介绍Python中的一些高级编程技巧
Apr 02 Python
python实现TCP服务器端与客户端的方法详解
Apr 30 Python
python控制台中实现进度条功能
Nov 10 Python
关于Django ForeignKey 反向查询中filter和_set的效率对比详解
Dec 15 Python
对python 通过ssh访问数据库的实例详解
Feb 19 Python
python取余运算符知识点详解
Jun 27 Python
Python使用matplotlib 画矩形的三种方式分析
Oct 31 Python
Python小整数对象池和字符串intern实例解析
Mar 21 Python
Python实现AI换脸功能
Apr 10 Python
VScode连接远程服务器上的jupyter notebook的实现
Apr 23 Python
python BeautifulSoup库的安装与使用
Dec 17 Python
python中常用的数据结构介绍
Jan 12 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
PHP 调试工具Debug Tools
2011/04/30 PHP
PHP和Mysql中转UTF8编码问题汇总
2015/10/10 PHP
PHP处理CSV表格文件的常用操作方法总结
2016/07/01 PHP
ThinkPHP框架结合Ajax实现用户名校验功能示例
2019/07/03 PHP
YII2框架中behavior行为的理解与使用方法示例
2020/03/13 PHP
实用的JS正则表达式(手机号码/IP正则/邮编正则/电话等)
2013/01/11 Javascript
js 字符串转换成数字的三种方法
2013/03/23 Javascript
javascript生成随机大小写字母的方法
2014/02/20 Javascript
实例讲解js验证表单项是否为空的方法
2016/01/09 Javascript
JavaScript数组实现数据结构中的队列与堆栈
2016/05/26 Javascript
微信小程序实现的3d轮播图效果示例【基于swiper组件】
2018/12/11 Javascript
详解Vue中使用插槽(slot)、聚类插槽
2019/04/12 Javascript
vue改变对象或数组时的刷新机制的方法总结
2019/04/24 Javascript
微信小程序工具函数封装
2019/10/28 Javascript
[01:03:38]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS CIS
2014/05/22 DOTA
Python修改Excel数据的实例代码
2013/11/01 Python
Python中time模块和datetime模块的用法示例
2016/02/28 Python
python 数据的清理行为实例详解
2017/07/12 Python
Python中的pygal安装和绘制直方图代码分享
2017/12/08 Python
python pandas 对series和dataframe的重置索引reindex方法
2018/06/07 Python
详解Python:面向对象编程
2019/04/10 Python
python3 自动识别usb连接状态,即对usb重连的判断方法
2019/07/03 Python
python 绘制拟合曲线并加指定点标识的实现
2019/07/10 Python
PyCharm使用Docker镜像搭建Python开发环境
2019/12/26 Python
详解tensorflow2.x版本无法调用gpu的一种解决方法
2020/05/25 Python
Python基于execjs运行js过程解析
2020/11/27 Python
UGG美国官网:购买UGG雪地靴、拖鞋和鞋子
2017/12/31 全球购物
亲戚结婚的请假条
2014/02/11 职场文书
空乘英文求职信
2014/04/13 职场文书
小学五年级语文上册教学计划
2015/01/22 职场文书
学生逃课检讨书
2015/02/17 职场文书
庆祝教师节活动总结
2015/03/23 职场文书
体育教师教学随笔
2015/08/15 职场文书
《语言的突破》读后感3篇
2019/12/12 职场文书
redis通过6379端口无法连接服务器(redis-server.exe闪退)
2021/05/08 Redis
Python探索生命起源 matplotlib细胞自动机动画演示
2022/04/21 Python