使用Faker生成虚拟数据

创建虚拟数据是编写Web程序时的常见需求。在简单的场景下,我们可以手动创建一些虚拟数据,但更方便的选择是使用第三方库实现。流行的python虚拟数据生成工具有Mimesis和Faker,后者同时支持python2和python3,而且文档中包含丰富的示例,所以这里选用Faker。首先用pipenv安装(使用—dev选项声明为开发依赖):pipenv install faker --dev

Faker内置了20多类虚拟数据,包括姓名、地址、网络账号、信用卡、时间、职位、公司名称、Python数据等。要生成虚拟数据,首先要实例化Faker类,创建一个fake对象作为虚拟数据生成器:

>>> from faker import Faker
>>> fake = Faker()

这个fake对象可以使用分别对应所有虚拟数据类别的方法来获取虚拟数据,比如name、address、text等,每次调用都会获得不同的随机结果,一些基本的实例如下所示:

>>> from faker import Faker
>>> fake = Faker()
>>> fake.name()
u'Shane Schmidt'
>>> fake.address()
u'5327 Mcintosh Knolls\nScottshire, SC 42652'
>>> fake.text()
u'Before least case never process financial upon instead.'
>>> fake.text()
u'Including wait dog she. Idea husband heart really executive safe option. Step save point quality citizen may.\nAir full name sea. Very matter camera public most.'

默认的虚拟数据语言为英文,如果你想获取其他语言的虚拟数据,可以在实例化Faker类时传入区域字符作为第一个参数(locale)来指定:

fake = Faker(‘zh_CN’)

在Faker中,简体中文和繁体中文对应的区域字符串分别为zn_CN和zh_TW.

下面示例中,用Faker实现了一个生成虚拟留言数据的命令函数fake。

messageBoard/messageBoard/commands.py:

@app.cli.command()
@click.option('--count', default=20, help='Quantity of messages, default is 20.')
def forge(count):
"""Generate fake messages."""
from faker import Faker db.drop_all()
db.create_all() fake = Faker()
click.echo('Working...') for i in range(count):
message = Message(
name = fake.name(),
body = fake.sentence(),
timestamp = fake.date_time_this_year()
)
db.session.add(message) db.session.commit()
click.echo('Created %d fake messages.' % count)

使用for循环操作数据库时,为了提高效率,我们只需要在for循环结束后调用一次db.session.commit()方法提交数据库会话。

在这个命令函数前,我们使用click提供的option装饰器为命令添加数量选项—count,使用default关键字将默认值设为20。

为了方便测试,生成虚拟数据前会删除重建数据库表。我们分别调用fake对象的name()、sentence()、date_time_this_year()方法生成虚拟的姓名、留言和时间戳。现在使用下面的命令生成虚拟数据:

(messageBoard-0K8c_mmc) D:\flask\messageBoard>flask forge
Working...
Created 20 fake messages.

选项—count用来指定生成的留言数量,下面生成了50条虚拟留言:

(messageBoard-0K8c_mmc) D:\flask\messageBoard>flask forge --count=50
Working...
Created 50 fake messages.

再次访问页面,首页会显示一个很长的留言列表,根据创建的随机日期排序,最先发表的排在上面

Flask实战-留言板-使用Faker生成虚拟数据的更多相关文章

  1. flask实战-个人博客-数据库-生成虚拟数据 --

    3.生成虚拟数据 为了方便编写程序前台和后台功能,我们在创建数据库模型后就编写生成虚拟数据的函数. 1)管理员 用于生成虚拟管理员信息的fake_admin()函数如下所示: personalBlog ...

  2. Flask实战-留言板-安装虚拟环境、使用包组织代码

    Flask实战 留言板 创建项目目录messageboard,从GreyLi的代码中把Pipfile和Pipfile.lock文件拷贝过来,这两个文件中定义了虚拟环境中需要安装的包的信息和位置,进入m ...

  3. flask实战-留言板-Web程序开发流程

    Web程序开发流程 在实际的开发中,一个Web程序的开发过程要设计多个角色,比如客户(提出需求).项目经理(决定需求的实现方式).开发者(实现需求)等,在这里我们假设自己是一个人全职开发.一般来说一个 ...

  4. Flask实战-留言板-使用Bootstrap-Flask简化页面编写

    使用Bootstrap-Flask简化页面编写 扩展Bootstrap-Flask内置了可以快速渲染Bootstrap样式HTML组件的宏,并提供了内置的Bootstap资源,方便快速开发,使用它可以 ...

  5. Flask实战-留言板-使用Flask-DebugToolbar调试程序、Flask配置的两种组织形式

    使用Flask-DebugToolbar调试程序 扩展Flask-DebugToolbar提供了一系列调试功能,可以用来查看请求的SQL语句.配置选项.资源加载情况等信息.这些信息在开发时会非常有用. ...

  6. 利用ForgeryPy生成虚拟数据

    在程序研发过程中,我们往往需要大量的虚拟实验数据.Python中有多个包可以用于生成虚拟数据,其中功能较为完善的是ForgeryPy. 1 安装 采用pip进行安装: pip install Forg ...

  7. Python Flask之留言板(无数据库)

    一个py文件,一个html文件,可以直接运行 py文件 from flask import Flask, request, render_template, redirect, url_for imp ...

  8. php+redis实战留言板(todolist)与互粉功能

    目的:通过留言板(todolist)与互粉功能,掌握php操作redis的方法 相关数据操作命令 1,keys * 查看数据库所有的key 2,type + key: 如 type uid     查 ...

  9. faker生成器生成虚拟数据的Python模块

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:行哥 今天给大家介绍一个Faker模块,一款基于Python的测试数 ...

随机推荐

  1. ECMA Script 6_Symbol() 唯一类型值声明函数_Symbol 数据类型

    Symbol 数据类型 let s = Symbol(); typeof s; // "symbol" 是 ES6 继 Number,String,Boolean,Undefine ...

  2. 3D Slicer Hide 3D Cube and Axis Labels Programmatically 使用代码隐藏三维视图中的方框和坐标轴标签

    在3D Slicer中,我们如果想在自己写的插件中来修改三维视图中的默认设置的话,那么首先就需要获得三维视图的结点,其类型为vtkMRMLViewNode,获得了这个结点后,我们就可以用代码来修改一系 ...

  3. Asch PK Lisk系列之一:安全性

    在币圈,听到对数字货币的质疑之声从来没少过.为什么有人会质疑呢?他们列出了很多理由(以下四点内容摘自网络): 数字货币是依附于网络的,而中国并没有独立自主的网络技术,容易被敌对势力利用数字货币损害中国 ...

  4. SHA256的总结与Go实现

    SHA256在线验证链接:SHA256 online hash function My Golang github源码 :https://github.com/kumataahh/Golang-too ...

  5. 1. Scala概述

    1.1 概述 联邦理工学院洛桑(EPFL)的Martin Odersky于2001年开始设计Scala Scala是Scalable Language的简写,是一门多范式的编程语言 1.2 Scala ...

  6. linux基础命令--groupdel 删除群组

    描述 groupdel命令用于删除用户组. groupdel命令会去修改系统下的/etc/group和/group/gshadow文件,删除有关用户组的所有项目(一般来说使用groupadd或user ...

  7. netcore log4相关

    配置: 1:NuGet程序包 - 搜索log4net - 安装 2:配置代码 Startup文件 #region log4        public static ILoggerRepository ...

  8. 2019春第九周作业Compile Summarize

    这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 这里 我在这个课程的目标是 能更加进一步的够熟练掌握指针的用法 这个作业在那个具体方面帮助我实现目标 能解更多的题 参考文献与网址 C语言 ...

  9. Java中数组的几个常用算法:插入算法,删除算法,冒泡排序算法

    前言: 在Java中我们常常会用数组,提到数组就不得不介绍数组中常用到的几个算法. 有插入算法,删除算法,冒泡排序算法等. 在学习这几个数组的算法前,我们先来了解一下关于数组一些基本知识. 数组的基本 ...

  10. 2019-oo-第二次总结

    这一单元是关于模拟电梯运行,考验多线程的一个单元,难度由简入入深,从多线程单部电梯,到优化,再到多线程多部电梯,难度一次次的提高. 一.多线程单部电梯(傻瓜调度) 1.设计策略 这一次我只额外的开了一 ...