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

时间:2018-02-24 12:26:37

标签: django database python-3.x postgresql

我创建了一个简单的Django应用程序,它试图访问fruits数据库中存在的名为PostgreSQL的表并显示其内容。我按照官方的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 个答案:

答案 0 :(得分: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

<强> UPD

Django希望id字段默认为主键,而不是ID,以将此primary_key选项更改为ID字段:

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