如何通过代码调用django-seed生成伪造数据库测试数据
代码运行方法
你找到的示例代码不能直接裸跑,必须在Django运行环境上下文里执行,下面是三种可直接落地的运行方式。先提前修正示例的小问题:原示例缺少import random的导入语句,且模型导入路径要替换成你自己项目的实际路径(比如你之前用的是api app,就把myapp替换成api,模型名换成你自己定义的模型类)。
方法1:自定义Django管理命令(最推荐)
这种方式和你之前用的python3 manage.py seed命令体验完全一致,不会出现环境配置错误,适合把种子逻辑固化到项目里:
- 在你的目标app目录下(比如api目录),依次新建层级目录
management/commands,在两个目录下都创建空的__init__.py文件标识Python包 - 在
commands目录下新建自定义命令文件,比如命名为seed_custom.py,写入如下代码:
import random from django.core.management.base import BaseCommand from django_seed import Seed # 替换成你自己的模型导入路径 from api.models import Game, Player class Command(BaseCommand): help = "自定义批量生成测试数据" def handle(self, *args, **kwargs): seeder = Seed.seeder() seeder.add_entity(Game, 5) seeder.add_entity(Player, 10, { 'score': lambda x: random.randint(0, 1000), 'nickname': lambda x: seeder.faker.email(), }) inserted_pks = seeder.execute() self.stdout.write(self.style.SUCCESS(f"数据生成完成,共插入记录主键:{inserted_pks}"))
- 回到项目根目录(manage.py所在层级),直接执行命令即可运行:
python3 manage.py seed_custom
方法2:独立脚本运行
如果你不想写管理命令,想单独跑一个脚本生成数据,需要在脚本最开头手动初始化Django环境:
- 在项目根目录新建脚本文件比如
run_seed.py,写入如下内容:
import os import random # 配置Django环境变量,把your_project替换成你自己的项目根目录名 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "your_project.settings") import django django.setup() # Django初始化完成后再导入seeder和模型 from django_seed import Seed from api.models import Game, Player if __name__ == "__main__": seeder = Seed.seeder() seeder.add_entity(Game, 5) seeder.add_entity(Player, 10, { 'score': lambda x: random.randint(0, 1000), 'nickname': lambda x: seeder.faker.email(), }) inserted_pks = seeder.execute() print(f"数据插入完成,插入记录主键:{inserted_pks}")
- 直接在项目根目录执行脚本即可:
python3 run_seed.py
方法3:Django Shell临时运行
如果只是临时生成一次测试数据,不需要留存代码,可以直接在Django交互Shell里执行:
- 项目根目录执行
python3 manage.py shell进入交互环境 - 逐行输入以下代码执行即可:
import random from django_seed import Seed from api.models import Game, Player seeder = Seed.seeder() seeder.add_entity(Game, 5) seeder.add_entity(Player, 10, { 'score': lambda x: random.randint(0, 1000), 'nickname': lambda x: seeder.faker.email(), }) inserted_pks = seeder.execute() print(inserted_pks)
小提示:如果模型之间存在外键、多对多关联关系,django-seed会自动处理关联数据的生成,你只需要保证被关联的模型也加入了seeder的实体列表即可,不需要手动指定关联字段的生成规则。
内容的提问来源于stack exchange,提问作者kaucap
相关产品推荐
相关产品推荐

