Django + InnoDB:模型阅读的随机失败

时间:2014-05-14 00:59:01

标签: python mysql django innodb

我在django有一个项目,它在开发服务器上运行良好但不在托管服务器上。

由于我无法访问托管服务器上的控制台,因此我通过将python manage.py sql <app name>的输出复制到托管服务器上的phpMyAdmin中的SQL查询部分来创建表。

在我的应用程序中,我有两个模型:

class Question(models.Model):
    creationDate = models.DateField('date created', auto_now_add=True, editable=False)
    publicationDate  = models.DateTimeField('date published', blank=True, null=True, default=None)
    author = models.ForeignKey(User)
    class Meta:
            get_latest_by = "publicationDate"

    def __str__(self):
            return str(self.id)

class Text(models.Model):
    question = models.ForeignKey(Question, db_index=True)
    answerId = models.PositiveSmallIntegerField(null=True, blank=True, default=None)
    language = models.CharField(max_length=5, default = "uk", choices=settings.LANGUAGES)
    text = models.CharField(max_length=255)
    imgPath = models.CharField('path to the image representing the question/answer', max_length=255, blank=True)
    colourId = models.PositiveSmallIntegerField(blank=True, null=True, default=None)

    def __str__(self):
            return self.text

我还有Django生成的Admin页面:

from django.contrib import admin
from survey.models import Question, Text

class TextInline(admin.StackedInline):
    fields = (('answerId','language','text','colourId'),)
    model = Text
    extra = 3

class QuestionAdmin(admin.ModelAdmin):
    fields = (('author','publicationDate'),)
    inlines = [TextInline]

admin.site.register(Question, QuestionAdmin)
admin.site.register(Text)

现在在开发服务器上一切正常。我可以为每个问题添加问题,不同语言的文本,保存,然后打开它,看看存储的内容。

在托管服务器上创建问题和文本的部分有效。当我检查SQL表时,所有信息都存储在那里。但是当我想在Admin视图中查看已保存的问题时,它总是显示Question对象的信息,但有时会显示与之关联的Text对象,但大多数时候都没有显示。

此外,在应在Admin视图中显示可用模型的页面上,Text对象也经常丢失,并且有时会在少量重新加载页面后显示。

对我而言,与数据库连接似乎有些问题。

主机使用MySQL 5.5.29,表是使用默认引擎InnoDB创建的。 Django中的配置如下:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '?????????',
        'USER': '?????????',
        'PASSWORD': '??????????',
        'ATOMIC_REQUESTS': True,
        'CONN_MAX_AGE': 0,
}

}

我尝试改变CONN_MAX_AGEATOMIC_REQUESTS参数,但它没有帮助。

什么可能导致这种行为?

1 个答案:

答案 0 :(得分:1)

这听起来不像数据库连接问题,这听起来像下列之一:

  • 缓存
  • 您修改了python文件并且没有重新启动Web服务器进程(例如Apache)来更新python文件。

我建议您尝试使用以下方法之一在托管Web服务器上重新加载python文件:

$ touch wsgi.py

$ sudo service apache2 restart

我假设您的Web服务器是Apache,否则使用适当的命令重新启动您的Web服务器。