转载 JR_willbeBetter 最后发布于2019-04-22 10:33:50 阅读数 544 收藏
展开
作者:黑色芝麻
原文: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
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'
-
>>> 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模型式的了。
实现过程:
- 利用pymysql连接数据库
- 创建表
- 利用fake格式化要插入的数据
- 利用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()
结果: