【问题标题】:How do I start with Django ORM to easily switch to SQLAlchemy?如何从 Django ORM 开始轻松切换到 SQLAlchemy?
【发布时间】:2013-08-30 04:28:33
【问题描述】:

像 Pinterest 和其他人一样,我想在 Django 中制作出色的应用程序。 他们中的许多人都在谈论 Django ORM 的局限性——Pinterest 在 Django ORM 中只使用一个表。我认为它可以是用户表或 django_session。这是因为他们是从 Django ORM 开始的。

那么,如果我要长期开发和推广我的网站,我应该选择什么解决方案?我将继续使用 django,而不是切换到 flask 或 nodeJS。

一些 django 专家正在修改 Djagno ORM、会话等。 https://github.com/devhub/baph.

但这对我来说是不是有点冒险,而且我不能使用许多 Django 功能,比如会话、重置密码。但是,一些出色的应用也可以与 SqlAlchemy 一起使用,例如:django-tastypie。

当然,数据库是最重要的,它必须很容易发展到始终保持快速。

那么我应该使用什么解决方案? User 和 django session 表使用 Django ORM 没问题吗? 剩下的我将使用 sqlAlchemy。所以我可以使用 django-registration、session 等。

你能看出这个解决方案有什么问题吗?

【问题讨论】:

  • 喜欢 Pinterest 和其他人”:似乎 Pinterest 不再(不再?)使用 Django,而是使用 Flask。例如,请参阅 thisthis

标签: python django sqlalchemy django-orm


【解决方案1】:

有一条一般规则,只要您按照 Django 的方式进行操作,Django 就可以正常工作。在这种情况下,这意味着如果您想在 Django 中使用 SQLAlchemy,您很可能会遇到一些意想不到的问题并且需要付出很多努力。

Django 的 ORM 很好。它不如 SQLAlchemy(个人意见),但它可以很好地完成工作。所以我的建议是:除非你有非常好的理由使用 SQLAlchemy 并且确信值得付出努力,否则一切都使用 Django ORM。

但是,如果有充分的理由不使用它,那么您可以替换它并使用 SQLAlchemy。正如您已经描述的那样,将默认的 Django 表保留在 ORM 中将为您省去这里所涉及的一些痛苦,所以这也是一个好主意。

最后,Django 甚至可能不是您的最佳解决方案。如果您已经了解 Django 并且知道它是您想要的,那么请使用它。否则,如果没有您更喜欢的其他框架,您也可以四处看看(在 Django 附近,我只知道 Pyramid,对于较小的应用程序,微框架可能就足够了)。

编辑:为了适应您的 cmets,这里有一些详细信息:

  • 你能分享一下连接吗?我认为这应该是可能的,但是您必须为使用 Django ORM 连接的 SQLAlchemy 创建一个连接池(或者可能创建您自己的池并为两者编写适配器,不太确定这是如何工作的与 Django)。但是,我认为您仍然必须给出不同的连接,因为您永远不希望一个干扰另一个。
  • 不使用通用的 Django 帮助器(管理员、表单等):如果您不关心泛型,那么替换 ORM 会很痛苦。因此,这听起来是一种明智的做法,如果您一开始就不想要它们,那么您不会在这里失去任何东西。
  • 内存使用情况:在这里您无能为力,但我不会太担心这一点。如果内存确实是一个问题,那么您一开始就不会使用 Django。

【讨论】:

  • 感谢您的回答。确实,用 SQLAlchemy 覆盖 Django ORM 会产生很多问题。所以相反,我更喜欢使用 Pyramid。但我喜欢 Django,尤其是 Django 大社区。​​span>
  • 所以我更喜欢将 User 和 django_session 表留在 Django ORM 中,并在 SQLAlchemy 中制作它和其余模型。现在我的问题是:“这个解决方案有一些限制吗?”我知道我将创建两个连接(来自 Django ORM 和 SQLAlchemy ORM),但可能是共享连接。我看到的问题是额外使用内存(SQLAlchemy 库)可能还有其他问题吗?
  • 啊哈!而且我不喜欢使用 Django 管理员、通用视图和表单。
  • 感谢您的回答!我将使用 Django ORM 尽量不使用过多的 Django ORM 依赖项(管理面板、表单、通用视图......)。 Django ORM 确实在不断发展(现在是 Djang 1.5.2,过去确实有很多限制,比如每个请求一个数据库或一个连接)。
  • 我也在考虑使用这种方法。我在 SQLAlchemy 和 django-user 组中发帖以获得意见和建议:groups.google.com/d/msg/django-users/KdW4OujTzBc/srdGVJGF_LAJ。令我惊讶的是,SQLAlchemy 小组的反应并不那么令人鼓舞。 django-user 组没有太多回应(而且我没有尝试更高级的 django-developers 组)。我仍在考虑我将使用哪种方法,但我想我会分享我对 stackoverflow 的建议请求。
猜你喜欢
  • 2010-12-02
  • 1970-01-01
  • 2020-06-05
  • 1970-01-01
  • 2016-04-23
  • 1970-01-01
  • 1970-01-01
  • 2013-04-09
  • 1970-01-01
相关资源
最近更新 更多