2015-12-22 75 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,你有这个想法吗? –