python3使用pymysql操作mysql5.7
版本信息:
1 2 3 4 MYSQL 5.7.21 PYTHON 3.6 pymysql 0.8.0 WIN 10
安装 首先,老样子,安装。 windows控制台直接执行:
即可,pipenv
进行类包管理,控制台中进入工程所在目录下,执行:
SQL sql.py文件,包含初始化数据库,创建库,创建表所有sql:
1 2 3 4 5 6 7 8 9 10 11 # 创建gloryroad数据库 create_database = 'CREATE DATABASE IF NOT EXISTS gloryroad DEFAULT CHARSET utf8 COLLATE utf8_general_ci;' # 创建testdata表 drop_table = 'drop table if exists TESTDATA;' create_table = """CREATE TABLE TESTDATA ( id INT NOT NULL, bookname VARCHAR(40) NOT NULL UNIQUE, author VARCHAR(30) NOT NULL)""" primary_sql = 'alter table testdata add primary key(id);' alter_id = 'alter table testdata change id id int AUTO_INCREMENT NOT NULL;'
创建表时候,我们在mysql控制台,或者在类似Navicat for mysql
这样的数据库连接工具中直接执行
1 2 3 4 5 6 7 CREATE TABLE `testdata` ( `id` int(11) NOT NULL AUTO_INCREMENT, `bookname` varchar(40) NOT NULL, `author` varchar(30) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `bookname` (`bookname`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
即可创建包含主键,唯一键,自增字段等属性的testdata
表,但是不知道为啥,我直接在pycharm中执行,一直报错,又不想耗在这上面,就拆开来了,先创建表,再增加主键,修改字段等操作。
pymysql创建数据库及表 创建库和表 pymysql对mysql的操作,基本可以总结为几步:
1 2 3 4 5 6 建立连接(connect) 打开游标(cursor) 执行sql(execute) 提交事务(commit) 关闭游标(close cursor) 关闭连接(connect close)
所以进行创建数据库和表操作时,一步一步执行即可:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ @author: kyle @time: 2018/2/11 13:06 """ from SQL import * import pymysql class DataBaseInit(object): """ 1、数据库初始化 2、创建数据库及表,并向表中插入测试数据 """ def __init__(self, host, port, dbName, username, password, charset): self.host = host self.port = port self.db = dbName self.username = username self.password = password self.charset = charset def creaete(self): # 建库及表 try: # 连接mysql数据库 conn = pymysql.connect( host = self.host, port = self.port, user = self.username, passwd = self.password, charset = self.charset ) # 获取数据库游标 cur = conn.cursor() # 创建数据库 cur.execute(create_database) # 选择创建好的数据库 conn.select_db("gloryroad") # 建表并更改字段 cur.execute(drop_table) cur.execute(create_table) cur.execute(primary_sql) cur.execute(alter_id) except pymysql.Error as e: raise e else: # 关闭游标 cur.close() # commit conn.commit() # 关闭连接 conn.close() print(u"创建数据库及表成功")
插入数据 插入数据也是正常步骤即可,当插入不止一条数据,可以使用executemany()
来一次插入多条数据,配合insert into table (col1, col2) values (%s, %s)
可以完成参数化一次插入大量数据;插入数据方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 def insertData(self): # 插入数据 try: # 连接具体某个库 conn = pymysql.connect( host=self.host, port=self.port, db=self.db, user=self.username, passwd=self.password, charset=self.charset ) # 打开游标 cur = conn.cursor() # 插入数据 sql = "insert into testdata (bookname, author) values (%s, %s)" cur.executemany(sql, [ ['FACE TO FACE WITH FARE', 'Amana Trobe'], ['Relationship', 'Christopher benas Meng'], ['ZOO', 'Yiyi'] ]) except pymysql.Error as e: raise e else: conn.commit() print(u"初始化数据插入成功") # 确认插入成功 # cur.execute("select * from testdata;") # for i in cur.fetchall(): # print(i[1], i[2]) cur.close() conn.close()
从mysql获取数据 很简单,一步一步走即可:
1 2 3 4 5 6 7 8 9 10 11 12 13 def getDataFromDataBases(self): # 从testdata表获取测试数据 # bookname作为testdata,author作为expectdata self.cur.execute("select bookname, author from testdata;") # 取查询结果 datasTuple = self.cur.fetchall() return datasTuple def closeDatabase(self): # 数据库后续操作 self.cur.close() self.conn.commit() self.conn.close()
至此,就可以完成测试数据存在mysql中,从数据库表中完成测试数据的读取以及断言判断等操作。