django使用原始sql测试负载数据

django使用原始sql测试负载数据,django,Django,我有一个django项目,使用多个数据库。我正在使用django nose作为测试跑步者。使用fixture将测试数据加载到默认数据库。我还有第二个数据库不由django模型管理,我想在测试之前使用原始sql创建一个结构并加载一些数据 有没有办法以一种干净的方式做到这一点 谢谢你。 这是我的情景以及我是如何解决的-YMMV 1) 我建立了一个数据库并重写了setup\u databases方法。我需要这样做,因为我想从外部创建这个数据库。我们有定制的表和函数。我确实使用了相同的代码,但有一点偏差

我有一个django项目,使用多个数据库。我正在使用django nose作为测试跑步者。使用fixture将测试数据加载到默认数据库。我还有第二个数据库不由django模型管理,我想在测试之前使用原始sql创建一个结构并加载一些数据

有没有办法以一种干净的方式做到这一点

谢谢你。

这是我的情景以及我是如何解决的-YMMV

1) 我建立了一个数据库并重写了setup\u databases方法。我需要这样做,因为我想从外部创建这个数据库。我们有定制的表和函数。我确实使用了相同的代码,但有一点偏差

class IManageTestRunner(DjangoTestSuiteRunner):
    """This is a 3 line addition to the original method"""

    def setup_databases(self, **kwargs):
        from django.db import connections, DEFAULT_DB_ALIAS

        ### Skipped for brevity ###

        for signature, (db_name, aliases) in dependency_ordered(test_databases.items(), dependencies):
            # Actually create the database for the first connection
            connection = connections[aliases[0]]
            old_names.append((connection, db_name, True))
            test_db_name = connection.creation.create_test_db(self.verbosity, autoclobber=not self.interactive)

            # Our little hack...
            if db_name == "bugs":
                create_IManage_instance(django_created_sql = True, mysql_db = "test_bugs",
                                    arg = value, arg2 = value )
            # End of our little hack..

            for alias in aliases[1:]:
                connection = connections[alias]

                ### Skipped for brevity ###
2) 将此添加到settings.py
TEST\u RUNNER='IManageTestRunner'

3) 一旦创建了这个数据库,我就知道我的测试数据库已经创建了。然后,我将创建外部填充的测试,并根据它测试结果

def test_add_property_value(self):
    """Test set / get a value"""
    # This will do some external process which occcurs to the db.
    pm = Pm(mysql_db='test_bugs', p4_port = settings.ICMSERVER_TEST_PORT)
    pmsite, pmproject, pmvariant, pmlibtype, pmlibrary, pmrelease = pm.add_release_tree()
    prop_type, pmvalue = ("string", "Funny Business")
    pmproperty = "%s_%s_basic" % (pmproject.name, prop_type)
    pm.add_property_definition(pmproperty, prop_type=prop_type)
    pm.add_propval(pmproperty, value=pmvalue, project=pmproject.name)

    # Now use Django to pull the value back out..
    project = Project.objects.get(name=pmproject.name)
    property = project.get_property(pmproperty)
    self.assertEqual(pmvalue, property.value)
希望这对我有帮助,我花了一段时间才弄明白。我仍然有一个问题(重复插入/查询…)