繁体   English   中英

Django - Raw查询必须包含主键

[英]Django - Raw query must include the primary key

这里有一个类似的问题 - 原始查询必须包含主键

但是,我正在运行旧版数据库,因此无法弄清楚主键的问题。

这是我的RAW查询 -

trg = Trgjob.objects.db_manager('AdmiralDEV').raw("""
    SELECT jobdep_id, jm.jobmst_id, jobdep_type, (jm1.jobmst_prntname + '\' + jm1.jobmst_name) AS jobdep_jobmst,
    jobdep_operator, jobdep_status, jobdep_joblogic, jobdep_ingroup, jobdep_dateoffset, jobdep_instoffset,
    jobdep_canignore, jobdep_filename, jobdep_filetype, jobdep_fileextent, nodmst_id, varmst_id, jobdep_value
    FROM Jobdep jd
    INNER JOIN Jobmst jm ON jd.jobmst_id = jm.jobmst_id
    INNER JOIN Jobmst jm1 ON jd.jobdep_jobmst = jm1.jobmst_id
    WHERE jm.jobmst_id = 9878""")

在DB工作正常,但在Django我得到以下失败 -

原始查询必须包含主键

这个模型的主键是“jobdep_id”,如下所示在models.py中 -

class Jobdep(models.Model):
    jobdep_id = models.IntegerField(primary_key=True)

尝试将查询编写为:

"SELECT jobdep_id AS id ..."

也许有帮助。

问题确实是我的models.py我必须按如下方式更新它 -

class Jobdep(models.Model):
    jobdep_id = models.IntegerField(db_column='jobdep_id', primary_key=True)

如果您使用Manager.raw(),则需要提供id。 https://docs.djangoproject.com/en/2.2/topics/db/sql/#performing-raw-sql-queries

只有一个字段是您不能忽略的 - 主键字段。 Django使用主键来标识模型实例,因此它必须始终包含在原始查询中。 如果您忘记包含主键,则会引发InvalidQuery异常。

但您可以直接执行自定义SQL以避免这种情况。 有关Django文档的更多信息,请访问https://docs.djangoproject.com/en/2.2/topics/db/sql/#executing-custom-sql-directly

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM