python-对于mysql数据库的操作
python操作mysql数据库
问题:DDL,DCL,DML的区别?
语言与框架:jdbc/odbc操作数据库
java(ibatis/hibernate/jpa)操作数据库
客户端工具:navicat for mysql
步骤:
1.连接上mysql
命令:mysql -u用户名 -p密码 -P端口 -hip地址 数据库名称
举例:mysql -uroot -proot -P3306 -h127.0.0.1 mysql
2.创建数据名称
命令:create database 数据库名称
举例:create database mydb
3.切换数据库
命令:use 数据库名称
举例:use mydb
4.创建表
命令:create table 表名(字段1名称 类型和长度 修饰符 是否可以为空,
字段2名称 类型和长度 修饰符 是否可以为空)
举例:create table userInfo(id int primary key not null,userName varchar(10) not null,userAge int not null,userSex varchar(10) not null,userAddress varchar(100) not null)
5.插入表
命令:insert into 表名 values(字段1,字段2,字段N)
举例:insert into userInfo values(1,'张三',20,'男','','北京');
insert into userInfo values(2,'李四',21,'女','上海');
6.查询表
命令:select *或者列名 from 表名 where 列名1=xxx and/or 列名2=xxx
举例:select * from userInfo;
7.Python操作mysql数据库
ipython+mysqlDBData.dll
python+MySQLdb,比如oracle(CX_oracle)
1)一般理论上操作流程
begin---建立连接(connection)-》操作数据(增/删/改查)-》获取结果
-》关闭连接---end
2)实际操作流程
begin---建立连接(connection)-》游标-》操作数据(增/删/改查)-》获取结果-》
-》提交事务-》关闭游标-》关闭连接---end
3)前提准备,需要安装MySQLDB
4)练习:使用python向userInfo表中插入一行数据
数据库数据预制脚本
mysql -uroot -proot -P3306 -h127.0.0.1 mysql
create database mydb;
use mydb;
create table userInfo(id int primary key not null,userName varchar(10) not null,userAge int not null,userSex varchar(10) not null,userAddress varchar(100) not null);
insert into userInfo values(1,'张三',20,'男','北京');
代码示例:
import MySQLdb
#begin---建立连接(connection)-》游标-》操作数据(增/删/改查)-》获取结果-》
# -》提交事务-》关闭游标-》关闭连接---end
#插入并查询所有结果
def select():
conn = MySQLdb.connect(host="127.0.0.1",port=3306,user="root",passwd="root",db="mydb",charset="utf8")
curson = conn.cursor()
result = curson.execute("select * from userInfo")
print "result: ",result
curson.close()
conn.close()
if __name__ == '__main__':
select()
8.python与mysql能解决什么问题?
1) 功能测试-----模拟业务数据
2)自动化测试----自动化用例的数据预制
3)性能测试----大量数据(<百万级),如果千万级数据推荐使用load
4)其他---测试桩开发、程序数据开发
9.插入和查询
插入:支持两种方式
1)单条插入 execute("insert into userInfo values(5,'测试人员2',25,'女','北京')"),也可以使用模板插入,例如:
cursor.execute("insert into userInfo values(%s,%s,%s,%s,%s)",(7,'测试人员4',27,'女','北京'))
2) 多条插入,需要使用占位符模板,通过元组列表来实现,例如:
模板语句:insertSql2 = insert into userInfo values(%s,%s,%s,%s,%s)
举例:executemany(insertSql2,元组列表),例如: executemany(insertSql2,[(8,'测试人员5',28,'女','北京'),(9,'测试人员6',29,'女','北京'),(10,'测试人员7',30,'女','北京')])
查询:查询当前游标指定的一行,查询所有行,查询当前游标以下多少行
1)查询当前游标的一行,cursor.fetchone()
2) 查询所有行,基于当前游标来说 ,cursor.fetchall()
3)查询当前游标以下的行数,cursor.fetchman(3) #比如3行
返回值是一个元组,多个是一个元组内包含元组,
游标是从0开始,数据取完后,游标的值等于数据总行,后面获取的值为None
10.修改和删除
删除:delete from userInfo where id = 10
修改:单条,多条修改
1)单条:通过普通的sql语句进行修改,例如execute("update userInfo set userAge=100 where id = 1")
通过占位符的方式进行传值:execute("update userInfo set userAge=%s where id = %s",(100,2))
2)多条:通过占位符,一次性操作多条:
executemany("update userInfo set userAge=%s where id = %s",[(100,3),(100,4),(100,5)])
11.事物性
def testTransaction():
conn = MySQLdb.connect(host="127.0.0.1",port=3306,user="root",passwd="root",db="mydb",charset="utf8")
cursor = conn.cursor()
try:
sql1 = "insert into userInfo values(11,'测试人员8',31,'女','北京')"
sql2 = "insert into userInfo values(10,'测试人员9',32,'女','北京')"
result1 = cursor.execute(sql1)
result2 = cursor.execute(sql2)
except Exception,e:
print str(e)
conn.rollback()
conn.commit()
cursor.close()
conn.close()
mysql事务自动提交的问题:
1.在mysql的系统配置文件my.ini文件中的[mysqld]下面加入autocommit =0
2.重启mysql服务,登录后事务的状态为off,通过show variables like '%commit%';查询如下:
autocommit | OFF
3.如果事务还是没有生效,可能是表创建时所用的存储引擎出现问题,引擎如下:
MyISAM效率更高,但不支持事务,不支持外键。----如果事务一开始被关闭,创建的表的引擎是这个,,不支持
自动提交事务
InnoDB效率略低,支持事务和外键。-----可以支持提交事务,需要把表的引擎修改过来,如下
4.修改表的存储引擎
show create table userInfo; 查看当前表所在的引擎:ENGINE=MyISAM DEFAULT CHARSET=utf8
ALTER TABLE userInfo ENGINE=InnoDB 修改当前表的引擎
# encoding=utf-8
import MySQLdb #begin---建立连接(connection)-》游标-》操作数据(增/删/改查)-》获取结果-》
# -》关闭游标-》关闭连接---end def getConn_cursor():
conn = MySQLdb.connect(host="127.0.0.1",port=3306,user="root",passwd="root",db="mydb",charset="utf8")
cursor = conn.cursor()
return conn,cursor;
#插入并查询所有结果
def insert():
conn = MySQLdb.connect(host="127.0.0.1",port=3306,user="root",passwd="root",db="mydb",charset="utf8")
cursor = conn.cursor()
#例如:insert into userInfo values(1,'张三',20,'男','北京');
#单条插入
insertSql="insert into userInfo values(5,'测试人员2',25,'女','北京')"
insertSql2="insert into userInfo values(%s,%s,%s,%s,%s)"
# insertResult2 = cursor.execute(insertSql2,(7,'测试人员4',27,'女','北京'))
#多条插入
insertResult2 = cursor.executemany(insertSql2,[(8,'测试人员5',28,'女','北京'),(9,'测试人员6',29,'女','北京'),(10,'测试人员7',30,'女','北京')])
print insertResult2
conn.commit()
cursor.close()
conn.close()
def select():
conn = MySQLdb.connect(host="127.0.0.1",port=3306,user="root",passwd="root",db="mydb",charset="utf8")
cursor = conn.cursor()
result = cursor.execute("select * from userInfo")
print "rownumber1",cursor.rownumber
print cursor.fetchone()
print "rownumber2",cursor.rownumber
print cursor.fetchone()
print "rownumber3",cursor.rownumber
print cursor.fetchmany(2)
print "rownumber4",cursor.rownumber
print cursor.fetchall()
print "rownumber5",cursor.rownumber
print cursor.fetchone()
print "rownumber6",cursor.rownumber
print "result: ",result
print cursor.fetchone()
print "rownumber7",cursor.rownumber
print "result: ",result cursor.close()
conn.close()
def delete():
conn = MySQLdb.connect(host="127.0.0.1",port=3306,user="root",passwd="root",db="mydb",charset="utf8")
cursor = conn.cursor()
result = cursor.execute("delete from userInfo where id = 8")
print "result: ",result
conn.commit()
cursor.close()
conn.close()
#修改
def update():
conn = MySQLdb.connect(host="127.0.0.1",port=3306,user="root",passwd="root",db="mydb",charset="utf8")
cursor = conn.cursor()
result = cursor.execute("update userInfo set userAge=100 where id = 1")
sql = "update userInfo set userAge=%s where id = %s"
result = cursor.execute(sql,(101,2))
print "result: ",result
results = cursor.executemany(sql,[(100,3),(100,4),(100,5)])
print "results: ",results
conn.commit()
cursor.close()
conn.close() def testTransaction():
conn = MySQLdb.connect(host="127.0.0.1",port=3306,user="root",passwd="root",db="mydb",charset="utf8")
cursor = conn.cursor()
try:
sql1 = "insert into userInfo values(13,'测试人员8',31,'女','北京')"
sql2 = "insert into userInfo values(10,'测试人员9',32,'女','北京')"
result1 = cursor.execute(sql1)
result2 = cursor.execute(sql2)
except Exception,e:
print str(e)
conn.rollback()
conn.commit()
cursor.close()
conn.close() if __name__ == '__main__':
# insert()
#select()
# delete()
# select()
testTransaction()
python-对于mysql数据库的操作的更多相关文章
- python中mysql数据库的操作-sqlalchemy
MySQLdb支持python2.*,不支持3.* ,python3里面使用PyMySQL模块代替 python3里面如果有报错 django.core.exceptions.ImproperlyC ...
- python之(mysql数据库操作)
前言:关心3步骤(此文章只针对python自动化根基展开描述) 什么是mysql数据库操作? 答:利用python对mysql数据库进行增, 删, 改, 查 操作 为什么要用python对mysql ...
- 使用python读取mysql数据库并进行数据的操作
(一)环境的配置 使用python调用mysql数据库要引进一些库. 目前我使用的python版本是python3.6.引进库为pymysql 其他对应的库可以有以下选择: mysqldb,oursq ...
- python专题-Mysql数据库(python3._+ PyMysql)
之前写过一篇 Python使用MySQL数据库的博客,主要使用的是Python2和MySQLdb驱动. python使用mysql数据库 Python2 ---> Python3 MySQLdb ...
- python专题-Mysql数据库(python2._+ Mysqldb)
Python使用MySQL数据库 MySQLdb驱动从2014年1月停止了维护. Python2 MySQLdb 一,安装mysql 如果是windows 用户,mysql 的安装非常简单,直接下载安 ...
- Python使用MySQL数据库(新)
之前写过一篇 Python使用MySQL数据库的博客,主要使用的是Python2和MySQLdb驱动. python使用mysql数据库 然而,2016年开始,我从Python2切换到了Python3 ...
- Python连接MySQL数据库的多种方式
上篇文章分享了windows下载mysql5.7压缩包配置安装mysql 后续可以选择 ①在本地创建一个数据库,使用navicat工具导出远程测试服务器的数据库至本地,用于学习操作,且不影响测试服务器 ...
- python对mysql进行简单操作
python 连接MySQL数据库,进行简单操作 一.连接MySQL数据库,关闭连接 import pymysql db = pymysql.connect(host="xxx.xxx.x. ...
- Python使用MySQL数据库【转】
转自 Python使用MySQL数据库(新)[很详细][fetchall和fetchmany有啥区别呢?] - CSDN博客https://blog.csdn.net/u011350541/artic ...
- Python在mysql中进行操作是十分容易和简洁的
首先声明一下,我用的是Windows系统! 1.在Python中对mysql数据库进行操作首先要导入pymysql模块,默认情况下,Python中是没有安装这个模块的, 可以在Windows的命令行中 ...
随机推荐
- Linux下php-fpm进程过多导致内存耗尽问题
这篇文章主要介绍了解决Linux下php-fpm进程过多导致内存耗尽问题,需要的朋友可以参考下 最近,发现个人博客的Linux服务器,数据库服务经常挂掉,导致需要重启,才能正常访问,极其恶心,于是 ...
- C指针和数组
一.指针 指针就是地址,指针变量是用来存放地址的变量,把谁的地址存放在指针变量中,就说此指针变量指向谁. 二.数组 1.一维数组 一维数组名代表数组首元素的地址,因此 *a=a[0]; &:取 ...
- TCP/IP 协议图--计算机网络体系结构分层
计算机网络体系结构分层 计算机网络体系结构分层 不难看出,TCP/IP 与 OSI 在分层模块上稍有区别.OSI 参考模型注重“通信协议必要的功能是什么”,而 TCP/IP 则更强调“在计算机上实 ...
- HTTP协议图--HTTP 报文首部之首部字段(重点分析)
1.首部字段概述 先来回顾一下首部字段在报文的位置,HTTP 报文包含报文首部和报文主体,报文首部包含请求行(或状态行)和首部字段. 在报文众多的字段当中,HTTP 首部字段包含的信息最为丰富.首部字 ...
- 5、Node.js 回调函数
内容:回调函数:阻塞/同步.非阻塞.和异步区别:阻塞和非阻塞代码实例 Node.js 回调函数Node.js 异步编程的直接体现就是回调.异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了. ...
- 2241. [SDOI2011]打地鼠【暴力+剪枝】
Description 打地鼠是这样的一个游戏:地面上有一些地鼠洞,地鼠们会不时从洞里探出头来很短时间后又缩回洞中.玩家的目标是在地鼠伸出头时,用锤子砸其头部,砸到的地鼠越多分数也就越高. 游戏中的锤 ...
- 【[APIO2007]动物园】
我好\(sb\)啊,把\(>>\)打成\(<<\)结果就写了两节课 那个一个人只能看到五个动物显然很鬼畜 那我们就可以压这一维了 \(dp[i][s]\)表示从第\(i\)个位 ...
- 五子棋项目总结 JavaScript+jQuery(插件写法)+bootstrap(模态框)
Html部分(界面): 1.五子棋棋盘由canvas完成: 2.两个按钮,样式由bootstrap完成: 3.菜单按钮对应的模态框,可以选择游戏模式:玩家自由对战,和电脑对战,还可以指定谁先执子和哪个 ...
- docker-8-本地镜像发布到阿里云
镜像的生成方法 1.前面的DockerFile 2.从容器创建一个新的镜像 docker commit [OPTIONS] 容器ID [REPOSITORY[:TAG]] 将本地镜像推送到阿里云 ...
- 2019.3.25 IDEA控制台乱码解决 &&idea关闭代码自动提示
设置Tomcat里面的conf文件夹下的properties结尾的文件