在Django ORM中使用get_or_create与多个数据库

6 投票
2 回答
1168 浏览
提问于 2025-04-17 05:30

Django的ORM(对象关系映射)支持从特定的数据库中查询数据(当你的项目中定义了多个数据库时),可以通过 .using() 函数来进行基于过滤的操作。

比如,你可以这样写:MyModel.objects.filter(name='Bob').using('my_non_default_database')

那么,当你想要创建新记录时,使用 MyModel() 类或者像 get_or_create() 这样的快捷方式,应该怎么做呢?

2 个回答

4

using 只是标准查询链的一部分。所以,你可以在发送查询到数据库之前的任何地方使用它。get_or_createfilter 不一样,它是原子的:当你调用它的时候,它会立即执行,所以你只需要在那之前调用 using

MyModel.objects.using('my_non_default_database').get_or_create(name='Bob')
10

using 是一个在 MyModel.objects 管理器上的方法,所以你可以这样做:

MyModel.objects.using('my_non_default_database').get_or_create(name="Bob")

如果你有一个 MyModel 的实例,你可以使用 using 这个关键词来指定要保存到哪个数据库。django 文档 提到了一些需要注意的地方。

my_model = MyModel(name="Bob")
my_model.save(using='my_non_default_database')

撰写回答