Django测试数据库中的自定义SQL函数

时间:2017-06-29 00:23:50

标签: python django

我正在使用PostgreSQL数据库为Django创建unittest测试。我正在尝试调用项目数据库中的函数,但测试失败,因为它找不到该函数。

我认为原因是因为测试数据库是在测试运行时创建的,而不是在原始数据库中加载函数。

我的问题是,¿我怎么能在Django测试数据库中包含该函数?

1 个答案:

答案 0 :(得分:0)

手动创建迁移,然后从那里运行sql文件。遵循以下原则:

from django.db import migrations, connection

# you can add more sql files here later on, bc these are just for testing
def run_raw_sql(apps, schema_editor):
    f = open('/home/edgle/web/plan/sql/get_plan_data.sql', 'r')
    sql = f.read()
    with connection.cursor() as cursor:
        cursor.execute(sql)

    f = open('/home/edgle/web/plan/sql/role_recursion.sql', 'r')
    sql = f.read()
    with connection.cursor() as cursor:
        cursor.execute(sql)

def reverse_run_raw_sql(apps, schema_editor):
    pass  # fake

class Migration(migrations.Migration):
    dependencies = [
        ('app_name', 'previous_migration_name'),
        ]

    operations = [
        migrations.RunPython(run_raw_sql, reverse_run_raw_sql),
        ]