2011-06-29 56 views
0

我已經遷移了現有的數據庫,我想使用django。我有以下型號:不想在django模型上進行內部連接

class Device(models.Model): 
    class Meta: 
     db_table = u'DEVICES' 
     managed=False 
    id = models.CharField(primary_key=True, max_length=22, db_column='DEVICE_ID') 
    name = models.CharField(max_length=40, db_column='DEVICE_NAME') 
    status = models.CharField(max_length=10, db_column='STATUS') 

class DevicePort(models.Model): 
    class Meta: 
     db_table = u'DEVICE_PORT' 
     managed=False 
    id = models.CharField(primary_key=True, max_length=22, db_column='DEVICE_PORT_ID') 
    device = models.OneToOneField(Device, db_column='DEVICE_ID') 
    type = models.CharField(max_length=22, db_column='PORT_TYPE_ID') 
    port_num = models.CharField(max_length=30, db_column='DEVICE_PORT_NUM') 

class IP(models.Model): 
    class Meta: 
     db_table = u'IP_NODE' 
     managed=False 
    ip_address = models.CharField(primary_key=True, max_length=15, db_column='IP_NODE_NO') 
    hostname = models.CharField(max_length=40, db_column='IP_HOST') 
    port = models.OneToOneField(DevicePort, db_column='DEVICE_PORT_ID') 
    status = models.CharField(max_length=50, db_column='IP_NODE_STATUS') 

我想要的Devices名單和他們的關係IP.ip_addressIP.hostname秒。在SQL中,我會做類似於:

SELECT UNIQUE 
    d.device_name device 
FROM 
    IP_NODE c, 
    DEVICES d, 
    DEVICE_PORT e 
WHERE 
    c.ip_node_no = b.ip_node_no 
    AND c.device_port_id = e.device_port_id 
    AND e.device_id = d.device_id 
    AND d.device_name LIKE 'something'; 

我該如何使用我的django模型?

+3

好的,請逗我。 *爲什麼*你不想讓它使用'INNER JOIN'? –

+0

您可以始終執行您自己的SQL語句,而不是讓ORM指定使用的語句:https://docs.djangoproject.com/en/1.3/topics/db/sql/ – Brandon

回答

1

因此,而不是你想要的內部連接...和隱式連接?有什麼我在這裏失蹤,因爲隱式連接比大多數情況下顯式連接慢。

[http://postgresql.1045698.n5.nabble.com/explicit-JOIN-faster-than-implicit-td1920335.html][1]

我看不到你想要的任何原因要做到這一點,但如上所述,您可以通過使用raw或甚至connection.cursor編寫自己的查詢來確定這一點。也許甚至可以把它拉下來(表格= [...]),雖然我不積極,因爲我從來沒有使用過這樣的表格。

+0

感謝您的鏈接;非常有趣......無論如何,我想我應該改寫一下這個問題:我的問題是,我想要不同的'Device's及其相關的'IP's - 因爲'Device'沒有任何引用'DevicePort'也不是'IP',我不確定如何繼續。歡呼聲, – yee379

+0

我不知道你在說什麼。你的代碼中'Device'和'DevicePort'之間的關係非常清楚。 –