我有一个 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()
来指定要运行查询的数据库。
有没有类似的东西来指定模式?
SQL Server 完全限定表名称的格式为:
[database].[schema].[table]
因此您可以解析 SQL 语句并确保每个表引用前面都有正确的架构。
或者,在准备工作中,确保每个模式都有一个可以切换到的用户。切换到目标模式的用户,执行,然后恢复回来。
EXECUTE AS USER = 'user_otherschema';
SELECT * FROM mytable
REVERT
我是这个主题的新手。我在这项研究中构建了我的回应:
https://dev.to/koladev/sql-schema-in-django-models-37jp
https://docs.djangoproject.com/en/4.2/topics/db/sql/