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()

    結果:

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章