Django数据库奇怪的行为 - 开发服务器加载大约几分钟

时间:2016-04-21 08:43:24

标签: django database database-connection

拜托,我发送了最后几天与db和django战斗。

我的问题是:我有数据库500 Mb大...在db中没有任何many_to_many,foreing等因此表格不是彼此独立的。在django中,我使用了inspectdb创建了模型。我的问题是,一旦我调用runserver,我必须等待大约5分钟才能启动服务器。我已经尝试使用python -vv manage.py runserver进行调试,以了解服务器卡在哪里,并且总是在尝试连接数据库时。

我尝试过与MySQL,PostgreSQL,MSSQL相同的数据库结构,但所有数据库都表现相同。还有不同的机器和不同的django版本。

一旦我创建了没有数据的数据库转储,只有db结构这么大的db wat大约16Kb,而Django服务器的启动速度很快(毫秒)。

我使用django版本1.9.5,但也试过1.8

请提出每一个提示,实际上我在想法的最后搜索问题。

谢谢

1 个答案:

答案 0 :(得分:0)

因此,经过几天调试并询问IRC后,我有理由说runserver(以及几乎每个manage.py命令)需要很长时间。 Django似乎不检查views.py中的SQL查询,其中我有大多数SQL查询。但是我在forms.py中有两个简单的查询,用于填写表单中的下拉列表,这会导致整个问题。

所以现在我知道问题在哪里,但我在想如何解决它。 事情是我需要我的模型中的数据。

我的表单看起来:

def get_vendor_set():
    """
    Returns set of contributors to use as choices
    """
    vendor_set = [  
        ('Availability', 'Availability'),
        ('No Competitor', 'No Competitor'),         
        ('Popularity', 'Popularity'),
    ]
    contrib = CompetitorLastPrice.objects.order_by('vendor')
    for con in contrib:
        vendor_set.append((con.vendor,con.vendor))

    return sorted(set(vendor_set))


def get_sorg_set():
    """
    Return set of sorg to use as choices
    """
    sorg_set = []
    sorg_cursor = CltSorg.objects.all()
    for sorg in sorg_cursor:
        sorg_set.append((sorg.sorg, sorg.sorg +' - '+ sorg.sorg_description))

    return sorg_set


class FamilyForm(forms.ModelForm):

    class Meta:
        model = Family
        fields = ['name', 'family_number', 'price_list', 'sorg', 'filter', 'linearity']
        widgets = { 
            'sorg': forms.Select(choices=get_sorg_set()),
        }


class CustomInlineFormset(BaseInlineFormSet):
    """
    Custom formset that support initial data
    """
    ...
    ...

ContribFormSet = inlineformset_factory(Family, Templates, formset=CustomInlineFormset,
                                       fields='__all__', min_num=1, extra=0,
                                       widgets={'contributor' : forms.Select(choices=get_vendor_set())}
)

问题导致那些小部件...... 有没有其他方法如何在forms.py之外的某个地方获取数据到初始表单(到选择列表)...我想以某种方式在views.py中进行。

感谢您的回答。