在开发的过程中,往往会碰到要给数据库填充数据的问题,为了快速生成尽可能接近真实的数据,本人开发了sql-faker,以下是该开源库的介绍。

开源库特性

支持主流的MySQL、Oracle、SQL Server、SQLite数据库

支持8种常见数据库字段类型的智能填充,并支持自定义拓展

支持一次性插入百万级别的数据

支持事务

支持python2.7

使用示范

from sql_faker import Faker, DataType, Values, Times, DBHelper

import pymysql

# 设置数据库信息

DBHelper.db_setting(db='python_sql_faker',

driver=pymysql,

user='root',

passwd='123456',

host='127.0.0.1',

port=3306)

# 给user表的四个字段填充5条数据

Faker.table_name("user") \

.param("name", DataType.USERNAME) \

.param("age", DataType.AGE) \

.param("address", DataType.ADDRESS) \

.param("birthday", DataType.TIME) \

.insert_count(5) \

.execute()

上述代码将生成如下SQL语句,并在数据库中执行:

insert into user(name,age,sex,address,birthday) values('武叹霜', 21, '山西省晋城市泽州县庆达路463号', '2018-02-24 10:56:37')

insert into user(name,age,sex,address,birthday) values('顾什可', 50, '广西壮族自治区柳州市融水苗族自治县德堡路419号', '2018-04-09 08:10:22')

insert into user(name,age,sex,address,birthday) values('蔡静随', 46, '河南省郑州市巩义市广延路240号', '2018-06-11 23:02:19')

insert into user(name,age,sex,address,birthday) values('韦丸赤', 27, '河南省焦作市博爱县浦润路148号', '2018-02-22 15:52:50')

insert into user(name,age,sex,address,birthday) values('任徐', 54, '河南省新乡市延津县汉源路14号', '2018-07-07 03:48:51')

依赖添加

本开源库另外依赖了DBUtils和pymysql库,需要一起进行pip安装。

pip install sql-faker

pip install DBUtils

pip install pymysql

如果安装不成功,点此连接进行下载whl文件 点击下载。

然后在控制台中移动到文件下载路径,执行如下命令:

cd 下载路径

pip install sql_faker-1.1.7-py2-none-any.whl

注意:默认使用MySQL数据库,如需更换成Oracle、SQL Server、SQLite等DBUtils连接池支持的数据库,可另行添加依赖,并在DBHelper.db_setting(driver=驱动对象)方法中指定数据库驱动。

数据库连接

一、连接属性设置

在进行插入数据之前需要设置数据库属性,如代码所示:

from sql_faker import DBHelper

import pymysql

# 设置数据库信息

DBHelper.db_setting(db='python_sql_faker',

driver=pymysql, # 设置连接驱动

user='root',

passwd='123456',

host='127.0.0.1',

port=3306)

可设置的属性如下表:

属性名

说明

默认值

db

数据库名

driver

数据库驱动对象

pymysql

user

数据库用户名

root

passwd

数据库密码

12345

host

主机地址

localhost

port

端口号

3306

二、特殊情况

当数据库属性值都等于默认值时,可只设置数据库名:

DBHelper.db_setting('python_sql_faker')

三、支持的驱动类型

# 支持的驱动类型,可在DBHelper.db_setting(driver=驱动对象)方法指定数据库驱动

# 1.首先在控制台进行pip安装

pip install pymysql # mysql

pip install pymssql # sqlserver

pip install cx_Oracle # oracle

pip install sqlite3 # sqlite3

# 2.之后导入所需驱动,设置到driver属性中

DBHelper.db_setting(db='python_sql_faker',

driver=cx_Oracle) # 设置连接驱动

注意 :数据库配置只需要设置一次,之后可以多次调用Faker进行插入数据操作。

数据插入

一、属性介绍

可设置的属性如下表:

属性名

说明

table_name(数据库表名)

设置数据库表名

param(字段名, 数据生成器类型①)

设置数据库字段名,以及对应的数据生成器类型

insert_count(插入条数)

设置插入数据条数

execute( )

生成SQL,显示在控制台,并在数据库中执行

only_show_sql( )

生成SQL,并显示在控制台

ignored( )

不执行任何操作

注意:① 数据生成器类型,必须是DataType枚举值,或实现了RandomData接口的类。

使用示例:

// 给user表的四个字段填充5条数据

Faker.table_name("user") \

.param("name", DataType.USERNAME) \

.param("age", DataType.AGE) \

.param("sex", DataType.SEX) \

.param("birthday", DataType.TIME) \

.insert_count(5) \

.execute()

// 给user表的两个字段生成5条SQL,并显示在控制台

Faker.table_name("user") \

.param("name", DataType.USERNAME) \

.param("age", DataType.AGE) \

.insert_count(5) \

.only_show_sql()

// 不执行任何操作,不生成SQL,不显示在控制台

Faker.table_name("user") \

.param("name", DataType.USERNAME) \

.param("age", DataType.AGE) \

.insert_count(5) \

.ignored()

二、插入数据的方式

本开源库一共支持三种插入数据的方式,可以混合使用。

1. 使用DataType指定数据类型

DataType一共支持8种枚举类型,如下表所示:

属性名

说明

类型

示例值

ID

用户ID

19位的数字型UUID字符串

1049120504188764160

USERNAME

用户名

长度为2到4个字的中文名

武叹霜

TIME

时间

一年前到现在的时间范围内任意一个时刻

2018-03-01 12:41:00

PHONE

手机号

11位手机号

13192668109

ADDRESS

地址

国内地址,详细到门牌号

四川省绵阳市盐亭县北利路738号

AGE

年龄

18到60岁的数字

19

SEX

性别

字符,0:男,1:女

'1'

使用示例:

// 给user表的8个字段填充1条数据

Faker.table_name("user") \

.param("id", DataType.ID) \

.param("name", DataType.USERNAME) \

.param("birthday", DataType.TIME) \

.param("phone", DataType.PHONE) \

.param("address", DataType.ADDRESS) \

.param("age", DataType.AGE) \

.param("sex", DataType.SEX) \

.param("email", DataType.EMAIL) \

.insert_count(1) \

.execute()

对应生成的SQL语句如下:

insert into

user(

id, name, birthday,

phone, address, age,

sex, email

)

values(

'1049120504188764160', '武叹霜', '2018-03-01 12:41:00',

'13192668109', '四川省绵阳市盐亭县北利路73号', 19,

'1', 'Alex705@gmail.com'

)

2. 使用 Values.of()系列方法生成取值范围

Values类共有以下8种生成取值范围方法,如下表:

方法名

取值范围

示例值

Values.of(可变长参数)

从可变长参数中任意抽取一个值

"优品", "良品", "次品"

Values.of_int_range(起始值,结束值)

在[起始值, 结束值]的范围内取一个整数

33

Values.of_float_range(起始值,结束值,精度)

在[起始值, 结束值]的范围内取一个浮点数,默认精确到小数点后2位,最多10位

123.333333f

Values.of_time_range(开始时间,结束时间)

在[开始时间, 结束时间]的范围内取一个时间,精确到秒

2018-03-14 13:21:11

另外,Times类中还有用于设定时间的两个方法:

方法名

说明

Times.of(年,月,日)

用于生成时间,精确到日

Times.of(年,月,日,时,分,秒)

用于生成时间,精确到秒

使用示例:

// 给product表的9个字段填充1条数据

Faker.table_name("product")\

.param("type", Values.of("优品", "良品", "次品"))\

.param("person_count", Values.of_int_range(20, 50))\

.param("enter_price", Values.of_float_range(12.33, 34.57))\

.param("outcome_price", Values.of_float_range(100.004132, 240.281424, 6))\

.param("firstTime", Values.of_time_range(Times.of(2018,3,22), Times.of(2018,10,22)))\

.param("secondTime",

Values.of_time_range(

Times.of(2018,3,22,11,23,24),

Times.of(2018,10,22,22,15,17)

)

)\

.insert_count(1)\

.only_show_sql()

对应生成的SQL语句如下:

insert into

product(

type, person_count, total_count,

enter_price, outcome_price, speed,

salary, firstTime, secondTime

)

values(

'良品', 33, 777777777,

22.22, 123.333333, 788.31,

1820.4231, '2018-03-14 00:00:00', '2018-03-14 13:21:11'

)

3. 继承RandomData类,重写create()方法,提供可随机生成的返回值

RandomData类的代码如下:

class RandomData:

"""随机值抽象类,子类必须实现create方法"""

__metaclass__ = ABCMeta

@abstractmethod

def create(self):

pass

继承该类,并重写create( )方法提供一个可随机生成的返回值,该返回值就是数据库字段对应插入的值。

使用示例:

创建一个自定义类EnglishNameRandom,继承RandomData类,并提供一个可随机生成的返回值。

import random

from sql_faker import Faker, DataType, Values, Times, DBHelper, RandomData

# 英文名数据生成器

class EnglishNameRandom(RandomData):

def create(self):

# 使用choice()方法从列表中随机抽取一个值,作为返回值

return random.choice(['jack', 'andy', 'kim'])

在Faker中给字段指定使用EnglishNameRandom类型的生成器。

// 指定name字段使用EnglishNameRandom类进行随机值的生成

Faker.table_name("user")\

.param("name", EnglishNameRandom)\

.param("age", Values.of_int_range(20, 50))\

.param("address", DataType.ADDRESS)\

.insert_count(5)\

.execute()

对应生成的SQL语句如下:

insert into user(name, age, address)

values('Andy Wang', 23, '四川省绵阳市盐亭县北利路73号')

PS:如果有任何建议,可以在Issues中提出,如添加DataType的默认类型等。

License

The python-sql-faker is released under MIT License.

python mysql扩展,python-sql-faker:轻量级、易拓展的数据库智能填充开源库(Python实现版)...相关推荐

  1. python mysql扩展_关于python:构建’_mysql’扩展错误:无法找到vcvarsall.bat

    我正在尝试通过pip mysql安装python 3.5. 我发现我有丢失的文件,vcvarsall.bat in "C: Program Files(x86) Microsoft Visu ...

  2. Python mysql操作 执行sql语句插入\查询等

    啊直接上代码了. 这个代码我用来做jenkins的构建记录的查询和写入的(在成功构建后,命令行执行的形式,执行该代码) (需要项目源码加v:ct-xiaozhou;非机构,行业变迁,多个好友多点可能性 ...

  3. go 获得 mysql 实际运行 SQL,Golang实践录:一个数据库迁移的代码记录

    实现一个数据库迁移的案子.有些知识点值得记录. 技术框架 github.com/go-xorm/xorm:数据库操作 github.com/denisenkom/go-mssqldb:sqlserve ...

  4. 天猫精灵 python 控制_树莓派4B小爱同学、天猫精灵、智能音箱、百度语音极速版、百度语音标准版、语音识别、语音合成终极方案...

    来源:树莓派创客空间 https:/r-pi.cn,里面更多教程 第一句话,python2版本的代码,python3你改改就完事了 第一句话,python2版本的代码,python3你改改就完事了 流 ...

  5. python字典最大长度_支持key过期失效和限制字典大小的开源项目 [python expire max length]...

    起因: 最近在写业务数据监控,既然是监控,那肯定是有不同时间区间的监控动作,放在linux下的crontab有些不合适了,因为有不同的函数要触犯,我不能为这堆函数定制一堆main()吧.用一些开源的计 ...

  6. mysql在c盘导入txt_TxtToMy|txt导入myql数据库工具(TxtToMy)下载v3.5官方版 - 欧普软件下载...

    TxtToMy是一个简单实用的可以将txt文件导入到mysql数据库的工具,支持向导和命令行两种操作方式,支持sql查询语句,能帮助用户把txt和csv中的数据导入到Msql数据库的表中,满足不同习惯 ...

  7. Python MySQL(MySQLdb)

    Python MySQL(MySQLdb) Python标准的数据库接口的Python DB-API(包括Python操作MySQL).大多数Python数据库接口坚持这个标准. Python标准的数 ...

  8. python连接阿里云数据库_记一次python备份阿里云RDS数据库

    阿里云是目前国内公有云排名靠前的一家企业,安全性较高,但在保证安全的前提下也存在着业务上云后如何进行备份,下面的实例是一个现实的项目案例,主要是数据库上云后如何将数据备份到本地存储设备中,下面是以py ...

  9. Dymola使用C语言间接调用含第三方库Python文件流程

    Dymola函数中调用python 一.语言配置介绍 Dymola:Dymola 2022 trail version C/C++与python见上一篇:调用python文件(含第三方库)时的C/C+ ...

  10. python mysql倒序_day40:MySQL:python操作mysql:pymysql模块SQL注入攻击

    目录 part1:用python连接mysql 1.用python连接mysql的基本语法 创建连接conn→创建游标对象cursor→执行sql语句execute→获取数据fetchone→释放游标 ...

最新文章

  1. 可持久化普通线段树 ---- P2839 [国家集训队]middle 可持久化普通线段树 + 二分 求中位数最大值
  2. 汇编语言基础 debug的使用
  3. 给定一组查找关键字(19,14,23,1,65,20,84,27,55,11,10,79) 哈希函数为:H(key)=key % 13, 哈希表长为m=15,设每个记录的查找概率相等。【MOOC】
  4. java 短路判断_java中和的区别(|和|同理)
  5. n个整数,其中有两个数是重复的,要求找出这两个重复的整数
  6. Spring-Boot (四) 集成Spring Security
  7. django 1.8 官方文档翻译:5-1-4 内建的Widget
  8. 没想到,MyBatis 背后居然用了这么多设计模式
  9. android防止左向右滑出程序,Android向右滑动关闭Activity(高仿知乎微信)
  10. 用GoEasy实现websocket
  11. YOLOv5中的CSP结构
  12. zynq之ps端开发
  13. 智能电子后视镜MFC01-LCD通用版 使用说明与简单故障排查
  14. RabbitMQ的Queue详解;
  15. php面试题(附带答案)
  16. 宜信大数据金融云==宜信==谷文栋==金融科技行业动态系列1
  17. C语言的初步简单认识
  18. 洪涝有源淹没算法及淹没结果分析
  19. 实现导入Excel表导入数据库并显示在echarts图形上面
  20. 查找和排序算法的学生成绩分析实验

热门文章

  1. 信息安全工程师考试心得体会
  2. 【comsol快速入门】
  3. 微信PC版怎么安装旧版本
  4. 2020年下半年软件设计师上午真题及答案解析
  5. IDEA安装插件及安装失败的处理方法
  6. idea 中代码大小写切换快捷键
  7. win10 -- 注册机认为是病毒,死活不让下载 --那就关了它的自带杀毒软件
  8. 51单片机步进电机c语言程序,51单片机的步进电机c语言驱动程序
  9. 微信小程序如何测试?
  10. gg修改器修改数值没有用怎么办_gg修改器修改游戏数值教程_gg修改器怎么修改数值_3DM手游...