有没有办法在Django中动态选择模式来执行SQL查询?

问题描述 投票:0回答:1

我有一个 Django 应用程序,它有一个模型,用于存储应在多个数据库中的另一个数据库上执行的 SQL 查询。

该模型中还有一个名为 schema 的列,用于存储要执行查询的架构。

class Query(BaseModel):
    STATUS_CHOICES = [
        ('active', 'Active'),
        ('inactive', 'Inactive'),
    ]

    name = models.CharField(max_length=100)
    syntax = models.TextField()
    description = models.TextField()
    group = models.ForeignKey(Group, on_delete=models.DO_NOTHING)
    schema = models.CharField(max_length=20)
    database = models.CharField(max_length=20)
    status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='active')
    extras = models.TextField()

如何以存储在同一记录中的架构名称执行存储在该模型中的原始 SQL 查询。

也可能有不同模式的不同 SQL 查询。

每次执行查询时,它都应该动态地从记录中获取模式并在数据库中运行它。

我知道我们可以使用 ORM 中的

.using()
来指定要运行查询的数据库。

有没有类似的东西来指定模式?

django django-models django-rest-framework orm django-orm
1个回答
0
投票

SQL Server 完全限定表名称的格式为:

[database].[schema].[table]

因此您可以解析 SQL 语句并确保每个表引用前面都有正确的架构。

或者,在准备工作中,确保每个模式都有一个可以切换到的用户。切换到目标模式的用户,执行,然后恢复回来。

EXECUTE AS USER = 'user_otherschema';
SELECT * FROM mytable
REVERT

我是这个主题的新手。我在这项研究中构建了我的回应:

Django:管理db_table的抽象基类

https://dev.to/koladev/sql-schema-in-django-models-37jp

https://docs.djangoproject.com/en/4.2/topics/db/sql/

设置 sql 查询的默认架构

EXECUTE AS USER = 'dbo' 抛出错误。为什么?

用Python解析SQL

© www.soinside.com 2019 - 2024. All rights reserved.