工具脚本分享——Python数据库插入脚本
编辑背景
这边打算分享一个工作中用到的一个mysql数据库的插入脚本,脚本主要用于往数据库中的某张表里面不断插入数据,可以用来生产测试的数据或者模拟数据库IO变化的场景。
环境信息
数据库脚本主要采取Python语言实现,需要额外安装一个python连接数据库的第三方库pymysql,其实换成其他数据库也可以,只要修改一下连接数据库的库就可以了。这个库的安装我是采用的pip方式安装的,可以自行去查一下安装方法,很简单。下面是我windows机器的python环境信息,我python用的是2.7.12,pymysql的版本是0.9.2,可能有点老了~
工具脚本使用
首先有一些预制的参数,这些参数就包含数据库账号密码,需要使用到的数据库信息,需要根据自己的需求去修改,这边会创建一个临时的表,脚本运行结束会把这张表删除,当然也可以选择不删除,只要注释掉相应删除方法就ok了。 一些内置参数:
#图片路径(根据实际情况修改)示例如下:
#picUrl = "D:\\img.jpg"(windows下)
#picUrl = "/root/index.jpg"(linux下)
picUrl = "D:\\index.jpg"
#连接的数据库服务器主机名(根据实际情况修改)示例如下:
#conhost="127.0.0.1"
conhost="localhost"
#连接的数据库端口号(根据实际情况修改)示例如下:
#conport=3307
conport=3306
#连接的数据库的用户名(根据实际情况修改)示例如下:
#conuser="tom"
conuser="root"
#连接的数据库的密码(根据实际情况修改)示例如下:
#conpasswd="111"
conpasswd="root"
#连接的数据库名(根据实际情况修改)示例如下:
#condb="mydb"
condb="test"
脚本使用很简单,只要使用python解释器执行脚本就可以了,这边会提示要求输入的插入多少条数据到数据库中,用户可以指定数量。 执行命令 python insert_mysql.py
脚本代码
最后贴一下脚本代码:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import pymysql
import time
import string
import random
#图片路径(根据实际情况修改)示例如下:
#picUrl = "D:\\img.jpg"(windows下)
#picUrl = "/root/index.jpg"(linux下)
picUrl = "D:\\index.jpg"
#连接的数据库服务器主机名(根据实际情况修改)示例如下:
#conhost="127.0.0.1"
conhost="localhost"
#连接的数据库端口号(根据实际情况修改)示例如下:
#conport=3307
conport=3306
#连接的数据库的用户名(根据实际情况修改)示例如下:
#conuser="tom"
conuser="root"
#连接的数据库的密码(根据实际情况修改)示例如下:
#conpasswd="111"
conpasswd="root"
#连接的数据库名(根据实际情况修改)示例如下:
#condb="mydb"
condb="test"
class BlobDataTestor:
def __init__(self):
#连接数据库
self.conn = pymysql.connect(host=conhost,port=conport, user=conuser,passwd=conpasswd,db=condb)
def __del__(self):
try:
self.conn.close()
except:
pass
def closedb(self):
self.conn.close()
#创建表
def setup(self):
cursor = self.conn.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS `Dem_Picture` (
`ID` int(11) NOT NULL auto_increment,
`time` timestamp ,
`PicData` mediumblob,
`RandomNum` varchar(20),
PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
""")
#删除表
def teardown(self):
cursor = self.conn.cursor()
try:
cursor.execute("Drop Table Dem_Picture")
self.conn.commit()
except:
pass
def testRWBlobData(self):
# 读取源图片数据
f = open(picUrl, "rb")
b = f.read()
f.close()
#生成随机数
s = ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(10))
# 将数据写入表
cursor = self.conn.cursor()
cursor.execute("INSERT INTO Dem_Picture (time,PicData,RandomNum) VALUES (current_timestamp,%s,%s)",((pymysql.Binary(b)),s))
self.conn.commit()
# 读取表内图片数据,并写入硬盘文件
# cursor.execute("SELECT PicData FROM Dem_Picture ORDER BY ID DESC limit 1")
# d = cursor.fetchone()[0]
# cursor.close()
#
# f = open("C:\\22.jpg", "wb")
# f.write(d)
# f.close()
if __name__ == "__main__":
test = BlobDataTestor()
try:
#创建表
test.setup()
a = input("Please input the number of insert:")
for i in range(a):
#这边注释打开是一直插入图片
#while 1:
test.testRWBlobData()
print "insert success"
#time.sleep(1)
#删除表
test.teardown()
finally:
test.closedb()