有时候对于不同的项目数据库中字段的生成方式多样,对于那些无法使用内置方法来实现的字段可以自己写 生成规则。下面就说下dbfaker如何加载自定义方法。
使用命令来创建一个dbfaker项目,项目名为目录名
dbfaker init --project_name myproject
cd myproject
创建成功后会在当前目录下生成一个myproject的目录,目录结构如下:
(venv) guolong@guolong-PC:~/PycharmProjects/dbfaker-test/dbfaker-project$ tree
.
├── data
│ └── sample.yml
├── log
│ └── dbfaker.log
├── readme.md
└── script # 自定义生成规则Python文件所在目录
├── __pycache__
│ └── sample.cpython-37.pyc
└── sample.py
4 directories, 5 files
(venv) guolong@guolong-PC:~/PycharmProjects/dbfaker-test/dbfaker-project$ ls -la
总用量 24
drwxr-xr-x 5 guolong guolong 4096 10月 19 18:10 .
drwxr-xr-x 6 guolong guolong 4096 10月 19 18:10 ..
drwxr-xr-x 2 guolong guolong 4096 10月 19 18:12 data
drwxr-xr-x 2 guolong guolong 4096 10月 19 18:10 log
-rw-r--r-- 1 guolong guolong 300 10月 19 18:10 readme.md
drwxr-xr-x 3 guolong guolong 4096 10月 19 18:10 script
在项目目录下的script目录下新建一个Python文件,文件名自定义(需以.py结尾),文件中添加一个继承自faker.BaseProvider的子类;类方法即为自定义的方法。
# 示例Python方法,一个对字符串进行md5加密的方法
cat script/sample.py
from faker.providers import BaseProvider
import hashlib
class MProvider(BaseProvider):
def md5(self, value: bytes):
if isinstance(value, str):
value = value.encode()
return hashlib.md5(value).hexdigest()
你可以在这个示例文件中继续添加自定义方法,也可以新起一个Python文件,继承faker.BaseProvider类即可!
package: []
env: {}
tables:
- table: t_sys_user
comment: 用户表
columns:
- column: id
comment: uuid
engine: null
rule: null
- column: username
comment: 用户账号
engine: phone_number
rule: null
- column: password
comment: 用户密码
engine: md5 # 这里引用了自定义的md5方法,对密码“password”进行md5加密处理
rule:
value: 'password'
- column: type
comment: 账号类型 password-普通账号 bjnews - 公众号
engine: eq
rule:
value: password
extraction: {}
# 在项目目录下(script目录的所在目录)执行命令
(venv) guolong@guolong-PC:~/PycharmProjects/dbfaker-test/dbfaker-project$ dbfaker data/sample.yml -p
py: sample.py
100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00, 54.40条/s]
INSERT `stu` (`id`,`name`,`idcard`,`age`,`sex`,`pwd`) VALUES ('85d764c4f73e423da533f90726cde000','杨宇','330881194609236782','74','female','e10adc3949ba59abbe56e057f20f883e');
INSERT `course` (`id`,`stu_id`,`course_name`,`course_time`) VALUES ('c608213264ae4c36ac3eaa6e87b2a144','85d764c4f73e423da533f90726cde000','化学','2020-10-19 18:24:50');
执行完成,共生成1组数据
test...