OperationalError:(1054,“'字段列表'中的未知列'time_table.id'”)

Posted

技术标签:

【中文标题】OperationalError:(1054,“\'字段列表\'中的未知列\'time_table.id\'”)【英文标题】:OperationalError: (1054, "Unknown column 'time_table.id' in 'field list'")OperationalError:(1054,“'字段列表'中的未知列'time_table.id'”) 【发布时间】:2016-09-29 06:57:39 【问题描述】:

我有一个不是由 django 创建的旧数据库,表如下:

$ describe `time`; 
+---------------+--------------+------+-----+-------------------+-----------------------------+
| Field         | Type         | Null | Key | Default           | Extra                       |
+---------------+--------------+------+-----+-------------------+-----------------------------+
| data          | varchar(16)  | NO   | MUL | NULL              |                             |
| source        | varchar(255) | NO   |     | NULL              |                             |
| source_origin | varchar(128) | YES  |     | NULL              |                             |
| sys_updated   | timestamp    | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+---------------+--------------+------+-----+-------------------+-----------------------------+

我通过inspectdb得到这张桌子的型号:

class Time(models.Model):
    data = models.ForeignKey('a_table', models.DO_NOTHING)
    source = models.CharField(max_length=255)
    source_origin = models.CharField(max_length=128, blank=True, null=True)
    sys_updated = models.DateTimeField()

    class Meta:
        managed = False
        db_table = 'time'
        unique_together = (('data', 'source_origin'),)

A 有一个简单的序列化器:

class TimeSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Time
        fields = ('data', 'source', 'source_origin', 'sys_updated') 

还有一个简单的view

class TimeList(generics.ListAPIView):
    """ Retrieves all data. """
    queryset = Time.objects.all()
    serializer_class = TimeSerializer

当我尝试从 localhost:8765/time/ 访问它时,我收到以下错误:

OperationalError: (1054, "Unknown column 'time.id' in 'field list'")

我的问题: 是否可以在没有 id 的情况下为 django 休息提供一张桌子? 我不想在我的餐桌上添加 id。

我在野外找到了一些answers,但没有帮助。

【问题讨论】:

正如 Ivan 所说,Django 要求每个模型都有一个主键。 This answer 建议您可以使用 values() 解决它。但是,我不知道是否可以将其余框架序列化程序更改为使用values() 而不是常规查询集。 【参考方案1】:

来自文档:

每个模型只需要一个字段来使 primary_key=True(要么 显式声明或自动添加)。

https://docs.djangoproject.com/en/1.9/topics/db/models/#automatic-primary-key-fields

所以恐怕答案是否定的。如果适合您,您可以尝试在其他字段之一上设置 primary_key=True..

【讨论】:

这不是一个好的解决方案,但如果我将 primary_key=True 添加到它正在工作的其他字段之一

以上是关于OperationalError:(1054,“'字段列表'中的未知列'time_table.id'”)的主要内容,如果未能解决你的问题,请参考以下文章

pymysql.err.OperationalError: (1054, “Unknown column ‘云南绿A生物工程有限公司福州分公司‘ in ‘field list‘“)解决办法

如何使用 String 实例插入 SQL 语句?

未解决:长字符串含…

sqlalchemy.exc.OperationalError:(sqlite3.OperationalError)没有这样的表:mytable

sqlalchemy.exc.OperationalError: (_mysql_exceptions.OperationalError) (2059, "Authentication pl

OperationalError: (OperationalError) (2003, "Can't connect to MySQL server on '192.168.129.139'