Python Django使用了错误的查询

2024-09-30 01:22:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个问题,为了解决它,我试着进入外壳,但我找不到解决方案,所以我希望你能帮助我。我正在导入包含id和图像URL的模型图像,但由于此错误,我无法获取它。 守则:

from recipes_database.models import Images 
Images.objects.all()

这里是错误:

Traceback (most recent call last):   File "F:\Developement\Projects\WhatToCookWeb\venv\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)   File "F:\Developement\Projects\WhatToCookWeb\venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 413, in execute
    return Database.Cursor.execute(self, query, params) sqlite3.OperationalError: no such column: Images.id

The above exception was the direct cause of the following exception:

Traceback (most recent call last):   File "<console>", line 1, in <module>   File "F:\Developement\Projects\WhatToCookWeb\venv\lib\site-packages\django\db\models\query.py", line 263, in __repr__
    data = list(self[:REPR_OUTPUT_SIZE + 1])   File "F:\Developement\Projects\WhatToCookWeb\venv\lib\site-packages\django\db\models\query.py", line 269, in __len__
    self._fetch_all()   File "F:\Developement\Projects\WhatToCookWeb\venv\lib\site-packages\django\db\models\query.py", line 1303, in _fetch_all
    self._result_cache = list(self._iterable_class(self))   File "F:\Developement\Projects\WhatToCookWeb\venv\lib\site-packages\django\db\models\query.py", line 53, in __iter__
    results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)   File "F:\Developement\Projects\WhatToCookWeb\venv\lib\site-packages\django\db\models\sql\compiler.py", line 1154, in execute_sql
    cursor.execute(sql, params)   File "F:\Developement\Projects\WhatToCookWeb\venv\lib\site-packages\django\db\backends\utils.py", line 98, in execute
    return super().execute(sql, params)   File "F:\Developement\Projects\WhatToCookWeb\venv\lib\site-packages\django\db\backends\utils.py", line 66, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)   File "F:\Developement\Projects\WhatToCookWeb\venv\lib\site-packages\django\db\backends\utils.py", line 75, in _execute_with_wrappers
    return executor(sql, params, many, context)   File "F:\Developement\Projects\WhatToCookWeb\venv\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)   File "F:\Developement\Projects\WhatToCookWeb\venv\lib\site-packages\django\db\utils.py", line 90, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value   File "F:\Developement\Projects\WhatToCookWeb\venv\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)   File "F:\Developement\Projects\WhatToCookWeb\venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 413, in execute
    return Database.Cursor.execute(self, query, params) django.db.utils.OperationalError: no such column: Images.id

但是,当我用我的其他模型做同样的事情时,它工作了,我想知道这次有什么不同。这是我的图像模型:

class Images(models.Model):
    # Field name made lowercase.
    rezept_id = models.ForeignKey(
        'Rezepte', models.DO_NOTHING, db_column='Rezept_ID', blank=True, null=True)
    # Field name made lowercase.
    image_url = models.CharField(
        db_column='Image_URL', blank=True, null=True, max_length=1000)

    class Meta:
        managed = False
        db_table = 'Images'

我认为Django使用了一个错误的查询,因为没有Images.id只是Images.recipe\u id。希望您能帮助我谢谢


Tags: djangoinpyselfexecutedbvenvlib
1条回答
网友
1楼 · 发布于 2024-09-30 01:22:21

Djangoautomatically adds a primary key如果您自己没有指定一个。事实上,正如documentation所说:

By default, Django gives each model the following field:

id = models.AutoField(primary_key=True)

This is an auto-incrementing primary key.

If you’d like to specify a custom primary key, specify primary_key=True on one of your fields. If Django sees you’ve explicitly set Field.primary_key, it won’t add the automatic id column.

在您的模型中,您没有设置主键,因此Django将自动添加一个额外的字段id,因此这也将在查询中使用

例如,如果image_url是主键,则可以将其指定为:

# image_url is the primary key

class Images(models.Model):
    # Field name made lowercase.
    rezept = models.ForeignKey(
        'Rezepte',
        models.DO_NOTHING,
        db_column='Rezept_ID',
        blank=True,
        null=True
    )
    # Field name made lowercase.
    image_url = models.CharField(
        db_column='Image_URL',
        blank=True,
        null=True,
        max_length=1000,
        primary_key=True
    )

    class Meta:
        managed = False
        db_table = 'Images'

rezept是主键的情况下,这也意味着它是唯一的,在这种情况下,将它设为^{} [Django-doc]更有意义,因为这是一个具有唯一性约束的ForeignKey,而且它对反向关系有一些影响:

# rezept is the primary key

class Images(models.Model):
    # Field name made lowercase.
    rezept = models.OneToOneField(
        'Rezepte',
        db_column='Rezept_ID',
        primary_key=True
    )
    # Field name made lowercase.
    image_url = models.CharField(
        db_column='Image_URL',
        blank=True,
        null=True,
        max_length=1000
    )

    class Meta:
        managed = False
        db_table = 'Images'

Note: Normally one does not add a suffix _id to a ForeignKey field, since Django will automatically add a "twin" field with an _id suffix. Therefore it should be rezept, instead of rezept_id.

相关问题 更多 >

    热门问题