MySQL实验准备(二)--Python模拟数据(MySQL数据库)
Python模拟数据(MySQL数据库)
数据模拟
目的:模拟多个表的插入和查询数据的模拟,再通过基准测试脚本测试服务器性能和收集数据,仿真模拟。
备注:
如果需要基础的python环境,可以查看《MySQL实验准备(一)--环境准备》文档
实验脚本
通过对一个简单表的脚本插入和查询模拟,后面能 举一反三,完成多张表的多表插入,多线程的多表插入,多线程查询,和多线程的join查询。
- 数据库的表结构
mysql> show create table zdemo.student;
+---------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+---------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| student | CREATE TABLE `student` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`stu_id` mediumint(8) unsigned NOT NULL COMMENT '学号id',
`stu_name` varchar(30) NOT NULL COMMENT '姓名',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+---------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
- batch_insert_stu.py
批量导入百万的数据。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import MySQLdb
import random
import string
conn = MySQLdb.connect("10.1.11.170", "zsd", "zsd@7101", "zdemo", charset='utf8' )
sql ='insert into student (stu_id,stu_name) values (%s,%s)'
for time in range(1,110):
data = [];
for r in range(1,9001):
data.append((
time * 10000 + r ,
['zhang', 'liu', 'hu','lu','han'][random.randint(0, 4)] + str(r)
))
conn.cursor().executemany(sql, data)
conn.commit()
time.sleep(5)
print("9000 inserted.")
conn.close()
- select_stu.py
简单的查询语句,用于简单测试MySQL服务的性能。使用了timeit函数,计算时间。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import MySQLdb
import random
import string
import timeit
conn = MySQLdb.connect("10.1.11.170", "zsd", "zsd@7101", "zdemo", charset='utf8' )
def selectOne(conn):
sql = 'select count(*) from student'
conn.cursor().execute(sql)
#看selectOne函数,执行10次的执行时间:
print(timeit.timeit('selectOne(conn)', 'from __main__ import selectOne,conn', number=10))
- **threads_select_stu.py **
多线程的查询脚本,仿真模拟数据的查询,测试MySQL数据库的性能。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import MySQLdb
import random
import string
import timeit
import time
import threading
import thread
def selectOne(threadName,n,delay):
conn = MySQLdb.connect("10.1.11.170", "zsd", "zsd@7101", "zdemo", charset='utf8' )
cursor = conn.cursor()
i = 1
while i < n:
i += 1
time.sleep(delay)
print '%s: %s is running...' % ( threadName, time.ctime(time.time()) )
sql = 'select count(*) from student'
cursor.execute(sql)
results = cursor.fetchall()
for row in results:
count = row[0]
print "count=%s" % count
print '%s: %s ended.' % ( threadName, time.ctime(time.time()) )
print(threading.current_thread().name, threading.current_thread().ident)
conn.close()
t1 = threading.Thread(target=selectOne,args=("Thread-1",4,2, ),name='worker-01')
t2 = threading.Thread(target=selectOne,args=("Thread-2",4,4, ),name='worker-02')
t1.start()
t2.start()
t1.join()
t2.join()
- **查询的结果 **
如下日志能看到,线程交替执行,模拟多线程查询
[root@db01 data]# python threads_select_stu.py
Thread-1: Sat Jun 16 20:57:00 2018 is running...
count=1119000
Thread-1: Sat Jun 16 20:57:00 2018 ended.
('worker-01', 139755490019072)
Thread-2: Sat Jun 16 20:57:02 2018 is running...
Thread-1: Sat Jun 16 20:57:02 2018 is running...
count=1119000
Thread-1: Sat Jun 16 20:57:03 2018 ended.
('worker-01', 139755490019072)
count=1119000
Thread-2: Sat Jun 16 20:57:03 2018 ended.
('worker-02', 139755479529216)
Thread-1: Sat Jun 16 20:57:05 2018 is running...
count=1119000
Thread-1: Sat Jun 16 20:57:05 2018 ended.
('worker-01', 139755490019072)
Thread-2: Sat Jun 16 20:57:07 2018 is running...
count=1119000
Thread-2: Sat Jun 16 20:57:12 2018 ended.
('worker-02', 139755479529216)
Thread-2: Sat Jun 16 20:57:16 2018 is running...
count=1119000
Thread-2: Sat Jun 16 20:57:17 2018 ended.
('worker-02', 139755479529216)
MySQL实验准备(二)--Python模拟数据(MySQL数据库)的更多相关文章
- mysql mariadb 删除表中的数据时数据库变大
删除表中数据以前 [root@RM uar3]# du -sh * 3.3G apache-tomcat-7.0.54 150M instalRM4UAR 0 mariadb 903M mariadb ...
- mysql 带换行符的字符串数据插入数据库异常
带换行符的字符串数据插入数据库异常现象 某个字符串类型的字段中部分记录中带换行符,数据同步插入异常,提示如下类似警告信息: Incorrect string value:'<aherf=&quo ...
- MySQL系列(十二)--如何设计一个关系型数据库(基本思路)
设计一个关系型数据库,也就是设计RDBMS(Relational Database Management System),这个问题考验的是对RDBMS各个模块的划分, 以及对数据库结构的了解.只要讲述 ...
- 使用Python将数据插入数据库(一)
假如我现在有一个Excel数据表格,需要将其数据插入MySQL数据库中.数据如下: 对应的Python实现代码如下: #导入需要使用到的数据模块 import pandas as pd import ...
- (转)Python中操作mysql的pymysql模块详解
原文:https://www.cnblogs.com/wt11/p/6141225.html https://shockerli.net/post/python3-pymysql/----Python ...
- 使用express, create-react-app, mongodb搭建react模拟数据开发环境
提要 最近刚刚完成了一个vue的项目,其中涉及的用户数有6000多个以及其他数据也比较多,为了在前端能够真实的进行数据模拟,所有把全量数据拷贝下来放到了api.json中.这样导致整个api.json ...
- 进击的Python【第十二章】:mysql介绍与简单操作,sqlachemy介绍与简单应用
进击的Python[第十二章]:mysql介绍与简单操作,sqlachemy介绍与简单应用 一.数据库介绍 什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,每个数 ...
- python+mysql:实现一千万条数据插入数据库
作业要求 构建一个关系模式和课本中的关系movies(title,year,length,movietype,studioname,producerC)一样的关系,名称自定,在这个关系中插入1000万 ...
- python——django使用mysql数据库(二)
上一篇中,我们已经讲述了如何初始化一个django数据库,这一章就来讲讲在实际的项目中如何使用我们初始化的数据库呢? 如还未进行初始化数据库操作,请参考python——django使用mysql数据库 ...
随机推荐
- mysql c-api 预处理语句
stmt = mysql_stmt_init(mysql) mysql_stmt_prepare(stmt, "SELECT ?", strlen("SELECT ?&q ...
- Django的学习进阶(二)———— name
一.问题: 在做完第一个demo的时候,由于只是基础学习,所以对于name的使用并不需要很熟练,也不用理解的很深.但是在做音乐网站的时候遇到了关于如何使用name的内容. 由于一个app中会使用到另一 ...
- 关于wifi网络基本原理了解
对于esp32,其wifi功能还是十分强大的,为了能够良好的完成wifi的相关开发,这里需要计算机网络的结构体系进行大致的了解. 一.网络结构分层 对于计算机网络结构,大体上可以分为5层结构: 物理层 ...
- Python学习第四章
1.类和对象: 类对象支持两种操作:属性引用和实例化. 属性引用:obj.name 构造方法:类会定义一个名为__int__()的特殊方法如下 def __init__(self): s ...
- CentOS配置多公网
最终目标是同一台服务器可以多个IP地址共同访问,在这个前提下又有如下两种方式: 多个公网IP使用同一个网关 多个公网IP使用不同网关 这两种方式区别所在:1.多个公网IP使用同一个网关,我们只 ...
- Learning WCF:Fault Handling
There are two types of Execptions which can be throwed from the WCF service. They are Application ex ...
- 札记:翻译-使用Scene和Transition实现【场景切换】动画效果
简述:transitions framework 下面翻译transition为"过渡",强调动画过程的含义,不过更多时候使用transition单词本身. Android 4.4 ...
- jsapi微信支付
JSAPI微信支付 引用js <script type="text/javascript" src="http://res.wx.qq.com/open/js/jw ...
- 不需要 root 权限的 ping
https://blog.lilydjwg.me/2013/10/29/non-privileged-icmp-ping.41390.html https://stackoverflow.com/qu ...
- linux下编写C++程序播放音频
参考: https://blog.csdn.net/zlyaxixuexi/article/details/79014441 格式转换: https://www.media.io/zh/