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‘“)解决办法
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'