python_faker使用

作者:黑色芝麻
原文:https://segmentfault.com/a/1190000011325538

参考文章:

作者:hellangels33
原文:https://www.cnblogs.com/hellangels333/p/9039784.html

作者:人道沉浮
原文:https://www.cnblogs.com/progor/p/9188683.html

版权声明:本人摘录、转载以上文章仅用于参考、学习、记录,转载请附上原文链接!

以下全为复制粘贴:


  • 介绍

faker是python的一个第三方模块、一个Python包,是一个github上的开源项目。主要用来创建伪数据,使用Faker包,无需再手动生成或者手写随机数来生成数据,只需要调用Faker提供的方法,即可完成数据的生成。

  • 安装

pip install Faker

  • 要创建假数据,需要先有一个faker实例

1、通过工厂函数来创建

from faker import Factory
>>> fake1 = Factory.create() # 通过工厂函数来创建
>>> fake1.name() # 调用方法-随机生成一个姓名
'Austin Parker'

2、直接通过构造函数来创建

>>> from faker import Faker  #主要使用的是Factory类,而导入Faker,会同时导入Factory
>>> fake2 = Faker() # 通过构造函数来创建
>>> fake2.address() # 调用方法-随机生成一个地址
'West Jamie, NV 91152-9807'

在faker中,name和address这种方法被称为提供器,提供器的类型很多,除了上面提到的name和address,还有:

     company()-随机公司名、postcode()-邮编、random_letter()-随机字母,等。

     常用方法可参考:

     1、https://www.cnblogs.com/hellangels333/p/9039784.html

     2、官方文档:https://faker.readthedocs.io/en/master/

  • 本地化:

      想要创建中文数据,可以使用下面的方法:

>>> fake = Faker('zh_CN')

#或者
>>> f=Faker(locale='zh_CN')

      Faker接受的本地化参数locale,创建的对象会生成对应语言的数据,如果没有找到对应的语言,会使用默认的"en_US"
可以在 https://faker.readthedocs.io/... 中查看所有支持的语言

  • 自定义提供器:

       有时候,你会想要创建自己的提供器,这时候只需要继承提供器的基类,并实现一些方法,随后调用add_provider将类加入到faker实例中即可。

       providers是一个包含了多种生成随机数据的生成器的“提供者”,比如他包含了生产随机姓名的生成器,包含了随机地址的生成器。如果我们想要自己定义随机生成的数据的规则,那么我们需要自定义providers。如何生成一个providers,可以参考https://faker.readthedocs.io/en/master/index.html#how-to-create-a-provider

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

# 引入基类
>>> from faker.providers import BaseProvider

# 创建并继承,实现方法
>>> class MyProvider(BaseProvider):
>>>     def foo(self):
>>>         return 'bar'

# 添加到实例中
>>> fake.add_provider(MyProvider)

# 调用
>>> fake.foo()
'bar'
  • 随机种子:

    当想要生成相同的数据时,需要调用faker的seed方法为其设置种子,这样之后使用提供器的时候,便会产生相同的内容。

>>> from faker import Faker
>>> fake = Faker()
>>> fake.random.seed(4321)
#fake.random.seed(4321) 可以写成 fake.seed(4321)

>>> fake.name()
'Ryan Gallagher'
>>> fake.address()
'7631 Johnson Village Suite 690\nAdamsbury, NC 50008'

#通过给定的seed可以控制每次生成的内容都是一样的
>>> fake.random.seed(4321)
>>> fake.name()
'Ryan Gallagher'
>>> fake.address()
'7631 Johnson Village Suite 690\nAdamsbury, NC 50008'

      *在设置随机种子后,如果调用同一个提供器两次,第二次调用会使faker实例的种子失效

>>> fake.seed(1)
>>> fake.name()
'Ryan Gallagher'
>>> fake.address()
'7631 Johnson Village Suite 690\nAdamsbury, NC 50008'
>>> fake.name()        #提供器name第二次被调用,使faker实例的种子失效
'Stanley Parks'

>>> fake.seed(1)     
>>> fake.name()
'Ryan Gallagher'   #不是对应的值了
>>> fake.name()
'Jon Cole'         #不是对应的值了
>>> fake.address()
'70669 Heather Grove\nNew Sierra, WI 00080-6360'      #不是对应的值了
  • 例子

                    (作者:人道沉浮   原文:https://www.cnblogs.com/progor/p/9188683.html

注意:这里为了例子简便,对于数据库操作就直接使用“命令式”的了,而不使用ORM模型式的了。

    实现过程:

  1. 利用pymysql连接数据库
  2. 创建表
  3. 利用fake格式化要插入的数据
  4. 利用pymysql执行插入语句

    代码:

import pymysql
from faker import Faker

conn=pymysql.connect(host="localhost",port=3306,user="root",password="123456",db="it",charset="utf8")

cursor=conn.cursor()
#这里给出表结构,如果使用已存在的表,可以不创建表。
sql="""
create table user(
id int PRIMARY KEY auto_increment,
username VARCHAR(20),
password VARCHAR(20),
address VARCHAR(35) 
)
"""
cursor.execute(sql)
fake=Faker("zh-CN")
for i in range(20):
    sql="""insert into user(username,password,address) 
    values('%s','%s','%s')"""\
        %(fake.user_name(),fake.password(special_chars=False),fake.address())
    cursor.execute(sql)

conn.commit()
cursor.close()
conn.close()

    结果:

 

 

 

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值