作者:黑色芝麻
原文: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模型式的了。
實現過程:
- 利用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()
結果: