我正在考虑为 Django 项目中的某些应用程序创建一个单独的 SQLite 数据库。
但是,如果可能,我不想使用直接 SQLite 访问。对这些数据库的 Django 风格的 ORM 访问将是理想的。
这可能吗?
谢谢你。
是的 - 用于此的低级 API 已经到位,目前只是缺少一个方便的高级 API。这些引用来自James Bennett(Django 的发布经理)在 reddit 编程中:
它已经存在了几个月——对于那些查看代码库的人来说,它是一个非常低级的 API——现在(每个
QuerySet
都由 a 支持Query
,它反过来接受一个数据库连接作为参数)。没有任何高级别的 API 文档,但我知道有人已经在做并且一直在做多数据库/分片场景之类的事情。...这不一定是需要大写的东西;的
__init__()
方法QuerySet
接受一个关键字参数query
,它应该是 的一个实例django.db.models.sql.Query
。的__init__()
方法Query
,反过来,接受一个关键字参数connection
,它应该是一个实例(一个后端特定的子类为您的数据库)django.db.backends.BaseDatabaseWrapper
。从那里开始,这很容易;例如,您可以覆盖
get_query_set()
管理器以始终QuerySet
使用您想要的连接返回 a,或者设置分片逻辑等内容,以根据传入的查询参数等确定要使用的数据库等。
目前没有——每个项目都使用一个数据库,并且每个应用程序都必须存在于其中。如果你想拥有一个特定于应用程序的数据库,你不能通过 Django ORM 来实现。请参阅有关Multiple Database Support的 Django wiki 页面。
这还不可能,但是在 wiki 上有一些关于它的讨论,Multiple Database Support in Django。它也在DjangoCon 2008 上关于 Django 未来的主题演讲中被提出,并成为更高优先级的问题之一。