python - Django 原始 SQL 查询与外键

标签 python django postgresql

models.py

class Author(models.Model):
    name = models.CharField(max_length=30)
    surname = models.CharField(max_length=50)

class Exhibit(models.Model):
    author_id = models.ForeignKey(Author)
    title = models.CharField(max_length=60)

create.sql (PostgreSQL)

CREATE TABLE Author (
    id serial NOT NULL,
    name varchar(30)  NOT NULL,
    surname varchar(50)  NOT NULL,
);

CREATE TABLE Exhibit (
    id serial NOT NULL,
    author_id int NOT NULL,
    title varchar(50) NOT NULL
);

这些是我的简化模型(与数据库表一对一映射),我正在执行一个看起来像这样的原始查询

Exhibit.objects.raw("SELECT * FROM Exhibit WHERE author_id = 1")

结果,我收到一个 ValueError - Cannot allocate "1": "Exhibit.author_id"must be a "Author"实例。

有没有一种方法可以在不使用 ORM 和 Author.objects(以及类似的东西)的情况下,仅通过查询数据库来解决这个问题?

最佳答案

用户django.db.connection为此:

from django.db import connection
cursor = connection.cursor()
cursor.execute("SELECT * FROM Exhibit WHERE author_id = 1")
result = cursor.fetchall()

关于python - Django 原始 SQL 查询与外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41839442/

相关文章:

python - 在 MySQL 中使用 DISTINCT

python - tensorflow map_fn TensorArray 具有不一致的形状

django - 在 Django 模板中将 regroup 与 get_foo_display 结合使用

javascript - Django:在脚本中使用上下文变量

c# - 如何在 postgresql 中显示来自 pg_stat_activity 的 unlisten * 查询

python - App Engine Python UrlFetch.set_default_fetch_deadline

python - Python 3.6 的最新 Anaconda 包可以用于 Python 3.5 吗?

linux - ubuntu 的 UWSGI https 配置

java - PostgreSQL - 使用 JDBC 写入 inet 列

javascript - 行查询中的单引号( Sequelize )