在传统数据库中,如何在Django中进行INNER JOIN? [英] How can I do INNER JOIN in Django in legacy database?

查看:122
本文介绍了在传统数据库中,如何在Django中进行INNER JOIN?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

对不起,可能是简单的问题,但我是Django的新手,真的很困惑。



我有一个我不能改变的丑陋的遗留表。

它有2个表:

  class Salespersons(models。模型):
id = models.IntegerField(unique = True,primary_key = True)
xsin = models.IntegerField()
name = models.CharField(max_length = 200)
surname = models.CharField(max_length = 200)

class Store(models.Model):
id = models.IntegerField(unique = True,primary_key = True)
xsin = models.IntegerField()
brand = models.CharField(max_length = 200)

所以我假设我不能在类定义中添加外键,因为它们更改表。



我需要执行这样的sql请求:

  SELECT * FROM Salespersons,Store INNER JOIN Store ON(Salespersons.xsin = Store.xsin); 

如何使用Django ORM实现?

或者我可以分别获得销售人员和商店,即

  stores = Store.objects.filter(xsin = 1000)
salespersons = Salespersons.objects.filter(xsin = 1000)


解决方案

给定您的示例查询,您的实际上名为Salespersons / Store?
无论如何,这样的东西应该可以工作:

  results = Salespersons.objects.extra(tables = [Store ],
其中= [Salespersons.xsin = Store.xsin))

但是,由于表/模型的名称,我认为内部连接在逻辑上是正确的。除非您总是在每个店铺只有一个销售人员,相同的 xsin


Sorry for probably simple question but I'm a newby in Django and really confused.

I have an ugly legacy tables that I can not change.
It has 2 tables:

class Salespersons(models.Model):
    id = models.IntegerField(unique=True, primary_key=True)
    xsin = models.IntegerField()
    name = models.CharField(max_length=200)
    surname = models.CharField(max_length=200)

class Store(models.Model):
    id = models.IntegerField(unique=True, primary_key=True)
    xsin = models.IntegerField()
    brand = models.CharField(max_length=200)

So I suppose I can not add Foreign keys in class definitions because they change the tables.

I need to execute such sql request:

SELECT * FROM Salespersons, Store INNER JOIN Store ON (Salespersons.xsin = Store.xsin);

How can I achieve it using Django ORM?
Or I'm allowed to get Salespersons and Store separately i.e.

stores = Store.objects.filter(xsin = 1000)
salespersons = Salespersons.objects.filter(xsin = 1000)

解决方案

Given your example query, are your tables actually named Salespersons/Store? Anyway, something like this should work:

results = Salespersons.objects.extra(tables=["Store"],
                          where=["""Salespersons.xsin = Store.xsin"""])

However, given the names of the tables/models it doesn't seem to me that an inner join would be logically correct. Unless you always have just 1 salesperson per store with same xsin.

这篇关于在传统数据库中,如何在Django中进行INNER JOIN?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆