在传统数据库中,如何在Django中进行INNER JOIN? [英] How can I do INNER JOIN in Django in legacy database?
问题描述
我有一个我不能改变的丑陋的遗留表。
它有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屋!