Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server Django模型基于使用MyModel.objects.raw()的SQL表值函数_Sql Server_Django_Django Models_Django Rest Framework_Pyodbc - Fatal编程技术网

Sql server Django模型基于使用MyModel.objects.raw()的SQL表值函数

Sql server Django模型基于使用MyModel.objects.raw()的SQL表值函数,sql-server,django,django-models,django-rest-framework,pyodbc,Sql Server,Django,Django Models,Django Rest Framework,Pyodbc,如果相关的话,我将Django与Django Rest框架、Django mssql后端和pyodbc一起使用 我正在使用相当复杂的查询和Django的MyModel.objects.raw()功能构建一些遗留数据库的只读模型。最初,我将查询作为一个Select查询执行,该查询运行良好,但是我收到了一个请求,请求尝试执行相同的操作,但使用数据库中的表值函数 执行此命令: MyModel.objects.raw(select * from dbo.f_mytablefunction) 给出错误:

如果相关的话,我将Django与Django Rest框架、Django mssql后端和pyodbc一起使用

我正在使用相当复杂的查询和Django的MyModel.objects.raw()功能构建一些遗留数据库的只读模型。最初,我将查询作为一个Select查询执行,该查询运行良好,但是我收到了一个请求,请求尝试执行相同的操作,但使用数据库中的表值函数

执行此命令:

MyModel.objects.raw(select * from dbo.f_mytablefunction)
给出错误:无效的对象名称“myapp\u mymodel”。 在出错时深入查看局部变量,似乎生成了以下SQL:

'SELECT [myapp_mymodel].[Field1], '
 '[myapp_mymodel].[Field2] FROM '
 '[myapp_mymodel] WHERE '
 '[myapp_mymodel].[Field1] = %s'
模型本身在执行等效查询时正确映射到查询:

MyModel.objects.raw(select * from dbo.mytable)
按预期返回数据,dbo.f_mytablefunction定义为:

CREATE FUNCTION dbo.f_mytablefunction
(
     @param1 = NULL etc etc
)
RETURNS TABLE
AS
RETURN
(
    SELECT
            field1, field2 etc etc
        FROM            
            dbo.mytable
)

如果有人对这两种操作模式的区别有任何解释,我会很高兴地找到答案。

我想你现在已经明白了(请参阅):

如果您想将表值函数映射到一个模型,有一个非常彻底的方法,尽管没有提到许可证

一旦将模型“对象”指向新的TableFunctionManager并添加了“函数参数”OrderedDict(请参见gist中的测试),您就可以按如下方式查询它:

MyModel.objects.all().table_function(param1=1)
对于任何想了解表值函数用例的人,请尝试搜索“your_db_vendor tvf”

MyModel.objects.all().table_function(param1=1)