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数据库)的更多相关文章

  1. mysql mariadb 删除表中的数据时数据库变大

    删除表中数据以前 [root@RM uar3]# du -sh * 3.3G apache-tomcat-7.0.54 150M instalRM4UAR 0 mariadb 903M mariadb ...

  2. mysql 带换行符的字符串数据插入数据库异常

    带换行符的字符串数据插入数据库异常现象 某个字符串类型的字段中部分记录中带换行符,数据同步插入异常,提示如下类似警告信息: Incorrect string value:'<aherf=&quo ...

  3. MySQL系列(十二)--如何设计一个关系型数据库(基本思路)

    设计一个关系型数据库,也就是设计RDBMS(Relational Database Management System),这个问题考验的是对RDBMS各个模块的划分, 以及对数据库结构的了解.只要讲述 ...

  4. 使用Python将数据插入数据库(一)

    假如我现在有一个Excel数据表格,需要将其数据插入MySQL数据库中.数据如下: 对应的Python实现代码如下: #导入需要使用到的数据模块 import pandas as pd import ...

  5. (转)Python中操作mysql的pymysql模块详解

    原文:https://www.cnblogs.com/wt11/p/6141225.html https://shockerli.net/post/python3-pymysql/----Python ...

  6. 使用express, create-react-app, mongodb搭建react模拟数据开发环境

    提要 最近刚刚完成了一个vue的项目,其中涉及的用户数有6000多个以及其他数据也比较多,为了在前端能够真实的进行数据模拟,所有把全量数据拷贝下来放到了api.json中.这样导致整个api.json ...

  7. 进击的Python【第十二章】:mysql介绍与简单操作,sqlachemy介绍与简单应用

    进击的Python[第十二章]:mysql介绍与简单操作,sqlachemy介绍与简单应用 一.数据库介绍 什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,每个数 ...

  8. python+mysql:实现一千万条数据插入数据库

    作业要求 构建一个关系模式和课本中的关系movies(title,year,length,movietype,studioname,producerC)一样的关系,名称自定,在这个关系中插入1000万 ...

  9. python——django使用mysql数据库(二)

    上一篇中,我们已经讲述了如何初始化一个django数据库,这一章就来讲讲在实际的项目中如何使用我们初始化的数据库呢? 如还未进行初始化数据库操作,请参考python——django使用mysql数据库 ...

随机推荐

  1. UVA 2451 Brackets sequence

    题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=9 ...

  2. 使用sublime 正则匹配替换大批量代码

    1,在使用Django框架时,导入之前没有使用框架完成的网页,这时会遇到静态文件地址不匹配的问题,需要大量修改. 研究了一下sublime编译器,大家都使用正则匹配替换 2,位置在查找--替换与匹配, ...

  3. 在linux中文件的权限讲解

    1.d:directory(目录): 表示这个文件是个目录,其他的还有f(file文件)等等: 2.r:read(可读) 3.w:write(可写) 4 x :execute(可执行) 一般Linux ...

  4. FJOI2018 部分题解

    领导集团问题 考虑对每一个点暴力dpdpdp:fi,jf_{i,j}fi,j​表示iii为根的子树选出来的点集最小值不小于jjj的点集元素个数最大值. 那么显然fi,j=∑max⁡{fv,k≥j}+1 ...

  5. Linux使用MentoHust联网线上校园网, 回到普通有线网络却连不上?

    我的解决方法如下: 在有线网的设置(Wired Settings)那里, 弹出Network窗口, 点击右下角的设置图标, 选择Security, 然后关掉802.1x Security. 然后就可以 ...

  6. Java从无知到入门书籍推荐

    0 前言 本文主题为Java Web书籍推荐 1 零基础学习 此处的零基础,指的是不懂或只懂if-else之类基本代码流程.初次接触,建议淘宝买一套**培训机构录播课程,看入门段视频.一是学习之初培养 ...

  7. Beta冲刺 (6/7)

    Part.1 开篇 队名:彳艮彳亍团队 组长博客:戳我进入 作业博客:班级博客本次作业的链接 Part.2 成员汇报 组员1:(组长)柯奇豪 过去两天完成了哪些任务 部分代码的整合 编辑及标注的提交操 ...

  8. java jar 包加载文件问题

    场景:   A 项目是一个服务,然后部署到本地 maven 仓库里,然后 B 项目依赖 A 项目,调用  A 项目的方法,但是发现,报错,说找不到文件(config.xsv).这就很奇怪了,怎么会呢, ...

  9. 去除swagger ui的红色 error 错误提示

    去除swagger ui的红色 error 错误提示 自定义js文件中加入以下的代码. 加入自定义的js方法看这里 http://www.cnblogs.com/wang2650/archive/20 ...

  10. CS231中的python + numpy课程

    本课程中所有作业将使用Python来完成.Python本身就是一种很棒的通用编程语言,现在在一些流行的库(numpy,scipy,matplotlib)的帮助下,它为科学计算提供强大的环境. 我们希望 ...