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()
上一篇: 怎样针对JavaScript中的异步函数进行异常处理及测试
下一篇: web应用常见安全漏洞一览