【问题标题】:Using Django ORM get_or_create with multiple databases将 Django ORM get_or_create 与多个数据库一起使用
【发布时间】:2011-12-20 11:42:14
【问题描述】:

Django 的 ORM 支持通过 .using() 函数从特定数据库(当您的项目中定义多个时)查询基于过滤器的操作。

例如MyModel.objects.filter(name='Bob').using('my_non_default_database')

在通过 MyModel() 类或 get_or_create() 之类的快捷方式创建新记录时,您将如何进行等效操作?

【问题讨论】:

    标签: python django django-orm


    【解决方案1】:

    usingMyModel.objects 管理器上的一个方法,所以你可以这样做

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

    如果你有一个 MyModel 实例,你可以使用 using 关键字来指定要保存到的数据库。 django docs 指出了一些问题。

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

    【讨论】:

    • 如何处理常规模型创建?例如MyModel(name='bob')
    • Saving 有一个关键字参数using。我已经更新了我的答案。
    【解决方案2】:

    using 只是标准查询链的一部分。因此,在将查询发送到数据库之前,您可以在任何地方使用它。 get_or_createfilter 不同,它是原子的:当您调用它时,它会立即执行此操作,因此您只需在此之前调用 using

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

    【讨论】:

      猜你喜欢
      • 2015-12-19
      • 2018-03-10
      • 1970-01-01
      • 1970-01-01
      • 2016-11-12
      • 1970-01-01
      • 2018-08-09
      • 1970-01-01
      • 2021-11-27
      相关资源
      最近更新 更多