【问题标题】:how to access SQLAlchemy to Django Model?如何访问 SQLAlchemy 到 Django 模型?
【发布时间】:2016-03-28 09:00:27
【问题描述】:

一个基本的 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))

【问题讨论】:

  • 您的问题是什么?我只看到陈述。
  • 我将使用 ORM SQLAlchemy,您看到上面的代码在 SQLA 中定义 Class 并创建表,但在 Django Model deffrent 中,我将访问 SQLA 中的 django 模型模型,如何?
  • 我不确定问题是什么,但看起来您想从 SQLAlchemy 访问 Django 模型,反之亦然?您可以为每个返回其相反版本的类添加一个函数(有点无意义),您可以创建映射到同一数据库的各种模型(不是毫无意义,但仅在特殊情况下有用情况(相同的数据库支持两个项目))。两者都很烦人,并且 all ORM 在数据库中的非平凡模式上做了一些非常愚蠢的事情。实际上,我建议您在 psycopg2 中编写自己的存储/检索函数。
  • 是的!我要从 SQLAlchemy 访问 Django 模型吗?如何?我可以在 SQLAchemy 上创建表,我也有 Django 模型,这意味着我有两个表,我需要在 SQLAlchemy 中访问字段 django 模型?
  • 这是个问题吗?

标签: python django sqlalchemy


【解决方案1】:

您可以向每个类添加一个返回其相反版本的函数,也可以创建映射到同一数据库的各种模型。让每个类都能够返回其相反的版本几乎毫无意义。仅当您有一个非常简单的数据模式时,将两个 ORM 框架映射到同一个数据库才有用(否则无论哪个框架没有创建数据库,映射都会变得非常困难)。

两者都很烦人,而且所有的 ORM 都在数据库中对非平凡的模式做了一些非常愚蠢的事情。实际上,我建议您在 psycopg2 中编写自己的存储/检索函数。

我从 Django 方面 here 了解了一些如何做到这一点。同样的事情可以在 SQLAlchemy 中完成。但是,您很快会发现,您最终会编写比基于 ORM 的查询更多的 raw() 查询——以至于 实际上更容易 的方式编写类>您想要并编写直接使用 psycopg2 与 Postgres 对话的序列化方法(或任何后端数据库——我假设 Postgres 是最常见的)。

如果您已经有一个由其中一个框架创建的数据库,我会强烈建议您坚持使用该 ORM 将架构转换为真正的关系架构手工设计。如果您的项目曾经是 Django Web 项目,但现在是非 Web 项目,您仍然可以独立于框架的其余部分使用 Django ORM,而不是尝试切换到 SQLAlchemy。一旦您让 ORM 创建一个模式,您的项目就会在其余生中与该框架结合。

【讨论】:

  • 我不明白? SQLA 和 Django Model 之间如何集成?
  • @RaminFarajpourCami 没有从 SQLA 模型到 Django 模型的直接转换。您必须手动编写转换,或者通过将 SQLA 对象映射到 Django 对象,或者通过在每个 SQLA 模型上编写自己的数据库读/写方法。这是一大堆没有任何好处的工作。
  • 我需要使用没有 Django 模型的 SQLAlchemy 的工作项目 django,你有这个想法吗?
猜你喜欢
  • 1970-01-01
  • 2013-10-15
  • 2022-11-30
  • 2017-12-15
  • 1970-01-01
  • 2020-03-03
  • 2014-12-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多