如何在Django应用程序中访问PostgreSQL数据库

3
我创建了一个简单的Django应用程序,试图访问名为PostgreSQL数据库中的“fruits”表并显示其内容。我遵循了官方的Django文档,并根据我所理解的实现了下面的代码。但是,我认为下面的过程是不完整的,因为“fruits.objects.all()”未能获取任何数据。我可能漏掉了什么,有人可以指出吗?任何帮助都将不胜感激。
表格:水果

enter image description here

models.py

from django.db import models

class fruits(models.Model):
    ID = models.CharField(max_length=20)
    Name = models.CharField(max_length=20)

    def __str__(self):
        return self.Name

views.py

from database.models import fruits

def index(request):
    data = fruits.objects.all()

    print(len(data))

    for item in data:
        print(item)

settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': '<database_name>',
        'USER': '<user_name>',
        'PASSWORD': '<password>',
        'HOST': '<host_name>',
        'PORT': '',
    }
}

1
类名通常以大写字母开始,并且是单数名词。因此,class fruits 应该变成 class Fruit。类属性通常使用蛇形命名法,因此应该使用 id 而不是 IDname 而不是 Name。请参考PEP 8并遵循编码规范。 - cezar
1个回答

1
默认情况下,Django 会为模型创建新表 appname_modelname。因此,在您的情况下,这个查询集 fruits.objects.all()app_fruits 表中获取数据,而不是 fruits 表。您可以使用 db_table 元选项指定表名。例如,要将模型 fruits 链接到现有表 fruits,请将以下 Meta 添加到模型中:
class fruits(models.Model):
    ID = models.IntegerField(max_length=20)
    Name = models.CharField(max_length=20)

    class Meta:
        db_table = 'fruits'

    def __str__(self):
        return self.Name

更新

Django默认情况下期望id字段为主键,而不是ID,如果要更改此设置,请在ID字段中添加primary_key选项:

ID = models.IntegerField(max_length=20, primary_key=True)

我现在遇到了这个错误:django.db.utils.ProgrammingError: 列 fruits.id 不存在第1行:SELECT "fruits"."id", "fruits"."Name" FROM "fruits" - Olivia Brown
@OliviaBrown 在ID字段中添加primary_key=True:ID = models.CharField(max_length=20, primary_key=True) - neverwalkaloner
1
我强烈建议不要使用CharField作为主键。这是一个不好的做法。相反,使用代理键 - cezar
@cezar 谢谢,我漏掉了这一部分。在数据库中,主键是整数字段。因此,在模型中应该使用整数而不是字符字段。 - neverwalkaloner
我如何访问一个没有使用model.Models创建的表,假设我使用命令行创建了一个表,并向其中添加了项目。我如何访问这些项目? - user12315602

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接