【问题标题】:django model building table name wrongdjango模型搭建表名错误
【发布时间】:2017-03-09 14:39:05
【问题描述】:

我的 ec2 实例在 aws 免费层上有一个 postgresql RDS 实例。我应该使用 EB,但直到我建立了很多东西并且对重新开始一个新的 ami 并不感到兴奋时才真正了解它。我正在尝试建立与数据库的第一次交互,在那里有一个名为 server_config 的表,创建为:

CREATE TABLE SERVER_CONFIGS
(
  config_key VARCHAR(63) NOT NULL,
  config_value VARCHAR(63) NOT NULL,
  UNIQUE (config_key)
);
INSERT INTO SERVER_CONFIGS (config_key,config_value) 
  VALUES ('ClientMustVerify','TRUE');
INSERT INTO SERVER_CONFIGS (config_key,config_value) 
  VALUES ('Auditing','FALSE');
COMMIT;

在我的 django 应用程序中,我有: 模型.py:

from django.db import models

class serverConfig(models.Model):

    config_key = models.CharField(max_length=63)
    config_value = models.CharField(max_length=63)

view.py 的摘录:

from limbo.models import serverConfig
def editServer(request):
    myConfigs = serverConfig.objects.all()
    configHtml = ""
    # for item in myConfigs #serverConfig.objects.values()
    #   configHtml += item.config_key + "\t" + item.config_value + "\n"

    if request.method == 'POST':
        form = serverForm(request.POST)
        if form.is_valid():
            integer = form.cleaned_data['int_field']
            request.session['integer'] = integer

            # call out to limboLogic.py to update values, add them to the session
            message = 'The value \'' + str(integer) + '\' has been updated.'
            return render(request, 'limboHtml/ServerConfiguration.html', {'form': form, 'SubmitMessage': message, 'CurrentConfigs': myConfigs})
        else:
            message = 'The server configuration has NOT been updated.' + '\n'
            message += ', '.join("%s=%r" % (key,val) for (key,val) in form.errors.iteritems()) + '\n' 
            # message += ', '.join("%s=%r" % (key,val) for (key,val) in form.non_field_errors.iteritems()) + '\n' 
            return render(request, 'limboHtml/ServerConfiguration.html', {'form': form, 'SubmitMessage': message, 'CurrentConfigs': myConfigs})
    # if a GET (or any other method) we'll create a blank form
    try:
        del request.session['integer']
    except KeyError:
        pass
    form = serverForm()
    return render(request, 'limboHtml/ServerConfiguration.html', {'form': form, 'SubmitMessage': '', 'CurrentConfigs': myConfigs})

错误信息:

文件 “/home/ec2-user/limbo/limboenv/local/lib/python2.7/site-packages/django/db/backends/utils.py”, 第 64 行,在执行中 return self.cursor.execute(sql, params) ProgrammingError: 关系 "limbo_serverconfig" 不存在 LINE 1: ...ig_key", "limbo_serverconfig"."config_value" FROM "limbo_ser...

为什么它在表格的开头附加了limbo_?有什么办法可以改变这个吗?我应该只在表格中使用我的应用名称(或者那是我的项目名称吗?它们被称为同一个东西......愚蠢的民意调查教程)?

ec2 上的 linux ami 上的 Django 1.10 和 python 2.7

【问题讨论】:

    标签: python django postgresql amazon-web-services amazon-ec2


    【解决方案1】:

    Django 为您的每个模型创建一个表。表的默认名称为app_name + '_' + model_name。如果您不希望它成为表的名称,您可以通过在模型的 Meta 类中指定 db_table 来覆盖它

    参考:https://docs.djangoproject.com/en/1.10/ref/models/options/#db-table

    建议

    请不要使用与项目同名的应用程序来编写您的应用程序逻辑。该应用程序应始终只包含项目设置

    【讨论】:

    • 在我试图弄清楚这一点时出现在另一个地方,但在 sql 工作台中没有证据表明存在这样的表。我应该先将表创建为limbo_server_configs 吗?
    • @Keith 第一次设置 django 项目时,您应该创建数据库,并为django <1.9 运行python manage.py syncdb 或为django>=1.9 运行python manage.py migrate。此命令创建所有必需的数据库表。在运行之前,请确保您首先执行python manage.py makemigrations
    • (limboenv)[ec2-user@ip-172-31-XX-XXXlimboproj]$ pythonlimbo/manage.py migrate 要执行的操作:应用所有迁移:admin、auth、contenttypes、sessions运行迁移:没有要应用的迁移。
    • @Keith 你做了迁移吗?
    • 是的:$ python limbo/manage.py makemigrations No changes detected (limboenv)[ec2-user@ip-172-XX-XX-XXX limboproj]$ python limbo/manage.py migrate Operations to perform: Apply all migrations: admin, auth, contenttypes, sessions Running migrations: No migrations to apply.
    猜你喜欢
    • 2018-11-06
    • 1970-01-01
    • 2016-07-13
    • 2013-03-21
    • 1970-01-01
    • 2018-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多