2015-12-22 53 views
-2

一個基本的Django模型看起來是這樣的:如何訪問SQLAlchemy到Django模型?

class Person(models.Model): 
    first_name = models.CharField(max_length=30) 
    last_name = models.CharField(max_length=30) 

與聲明的基礎等效SQLAlchemy的模式是這樣的:

from sqlalchemy import Column, Integer, String 
class Person(Base):`enter code here` 
    __tablename__ = 'persons' 
    id = Column(Integer, primary_key=True) 
    first_name = Column(String(30)) 
    last_name = Column(String(30)) 
+1

你的問題是什麼?我只看到陳述。 – dave

+0

我正在使用ORM SQLAlchemy你看到上面的代碼定義類中並在SQLA中創建表,但在Django模型deffrent中,我將訪問SQLA中django模型的模型,怎麼樣? –

+0

我不確定問題是什麼,但它看起來像要從SQLAlchemy訪問Django模型,反之亦然?您可以爲每個返回其相反版本的類添加一個函數(*或*),您可以創建映射到相同數據庫的每個類型的模型(不是毫無意義的,但僅在特殊情況下才有用(相同的數據庫支持兩個項目))。兩者都很煩人,*所有* ORMs在非平凡模式的db中做了一些非常頭疼的事情。我建議實際上在psycopg2中編寫自己的存儲/檢索函數。 – zxq9

回答

0

您可以添加一個功能,每一個返回其相反的版本類,或者您可以創建映射到相同數據庫的每個品種的模型。每個班都能夠返回其相反的版本幾乎沒有意義。如果您有一個簡單的數據模式(否則無論哪個框架都不創建數據庫,映射變得非常困難),那麼將兩個ORM框架映射到相同的數據庫是非常有用的。

這兩個都很煩人,所有的ORM都在非重要的模式下在數據庫中做了一些非常頭疼的事情。我建議實際上在psycopg2中編寫自己的存儲/檢索函數。

我去了一些如何從Django端here做到這一點。 SQLAlchemy中可以完成同樣的事情。然而,你會很快發現,你會發現編寫更多的原始()查詢比ORM爲基礎的 - 以至於它是實際上更容易只寫類的方式想要和寫序列化使用psycopg2直接與Postgres交談的方法(或者後端數據庫恰好是 - 我假定Postgres是最常見的)。

如果你已經有一個數據庫,創建的框架之一,我會強烈建議剛剛與ORM 模式轉換爲用於實時關係模式你手工設計堅持。如果你有一個曾經是Django web項目但現在是非web的項目,你仍然可以獨立於框架的其餘部分使用Django ORM,而不是嘗試切換到SQLAlchemy。一旦你讓一個ORM創建一個模式,你的項目就終生與該框架結合了。

+0

我不明白? SQLA和Django Model之間如何集成? –

+0

@RaminFarajpourCami從SQLA模型到Django模型有* no *直接翻譯。您必須手動編寫轉換,或者將SQLA對象映射到Django對象,或者在每個SQLA模型上編寫自己的數據庫讀/寫方法。這是一大筆沒有好處的工作。 – zxq9

+0

我需要與SQLAlchemy沒有Django模型的工作項目Django,你有這個想法嗎? –