You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django查询数据表时报no such column: AGC.id错误如何解决?

问题根因
  • 你使用的是已存在的AGC数据表,Django默认给无显式主键的模型加id主键的逻辑,只适用于Django自己通过迁移创建的表,你现有表本身没有id字段,所以查询时就触发了no such column: AGC.id的报错
  • 模板代码存在两处错误:一是循环变量名是AGC,但实际调用时写成了类名Agc,即便主键问题解决也会取不到值;二是表格列数和表头不匹配,多输出了一列重复的index值
修复步骤

步骤1:修正模型主键配置

两种方案二选一,根据你现有表的实际情况选择:

方案A:指定现有字段为主键(优先选择,不需要修改现有表结构)

如果你的index字段是唯一且非空的,直接修改模型的index字段定义,加上primary_key=True,Django就不会自动生成id主键了:

class Agc(models.Model):
    index = models.BigIntegerField(primary_key=True, blank=True, null=True)
    area = models.TextField(db_column='AREA', blank=True, null=True)  # Field name made lowercase.
    periodo = models.BigIntegerField(db_column='PERIODO', blank=True, null=True)  # Field name made lowercase.
    demanda = models.TextField(db_column='DEMANDA', blank=True, null=True)  # Field name made lowercase. This field type is a guess.

    class Meta:
        db_table = 'AGC'

修改后执行迁移时加--fake参数,避免Django尝试修改现有表结构:

python manage.py makemigrations
python manage.py migrate --fake

方案B:给现有AGC表加id字段

如果没有合适的现有字段当主键,你需要先手动给数据库里的AGC表新增一个自增整数类型的id列,设为主键,之后不需要修改模型,Django默认的id主键逻辑就能正常运行。

步骤2:修正模板代码

把模板里所有Agc.xxx的写法改成循环变量AGC.xxx,同时删掉多余的重复index列,修正后的循环部分代码如下:

{% if AGCs %}
    {% for AGC in AGCs  %}
        <tr>
            <th scope='row'>{{ AGC.id }}</th>
            <td>{{ AGC.index }}</td>
            <td>{{ AGC.area }}</td>
            <td>{{ AGC.periodo }}</td>
            <td>{{ AGC.demanda }}</td>
        </tr>
    {% endfor %}
{% else %}
    <h1>No hay datos </h1>
{% endif %}

内容的提问来源于stack exchange,提问作者Jose Sebastian alvarez Mendoza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 05:54:00