You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django如何将现有Postgres数据库的架构复制到测试数据库?

解决Django测试数据库未复制现有Postgres架构的问题

方法一:修改模型的managed属性(推荐,适合允许Django管理表结构的场景)

  • 找到inspectdb生成的所有模型文件,将每个模型中的managed = False改为managed = True
  • 生成迁移文件:python manage.py makemigrations
  • 后续运行测试时,Django会自动将迁移应用到测试数据库,生成对应架构

方法二:直接导入现有数据库架构(适合不想让Django管理原数据库表的场景)

  1. 导出现有数据库的纯架构(不含数据):
    pg_dump -s -d 你的现有数据库名 -U 数据库用户名 > schema.sql
    
  2. 在测试类的setUp方法中导入架构并插入测试数据:
    from django.db import connection
    from django.test import TestCase
    from .models import YourModel
    
    class SampleTestCase(TestCase):
        def setUp(self):
            # 导入数据库架构
            with open('schema.sql', 'r', encoding='utf-8') as f:
                sql_content = f.read()
                with connection.cursor() as cursor:
                    cursor.execute(sql_content)
            
            # 插入模拟数据
            YourModel.objects.create(field_name='测试值', another_field='其他测试数据')
    

方法三:复用测试数据库(适合频繁运行测试的场景)

  1. 手动创建测试数据库并导入架构:
    # 创建测试数据库
    createdb 你的测试数据库名 -U 数据库用户名
    # 导入架构
    psql -d 你的测试数据库名 -U 数据库用户名 -f schema.sql
    
  2. 运行测试时添加--keepdb参数,避免每次重建数据库:
    python manage.py test --keepdb
    
  3. 在测试类的setUp方法中直接插入模拟数据即可

注意:使用方法二、三时,要确保测试数据库的用户拥有创建表、执行SQL的足够权限;方法一中生成的迁移文件要和现有数据库结构一致,避免后续迁移冲突。

内容的提问来源于stack exchange,提问作者Hamed Damirchi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 14:36:17