我正在尝试在多数据库Django安装上调用存储过程,但是没有任何运气获得结果。存储过程(在辅助数据库上)总是在Django中返回一个空数组,但是在mysql客户端中执行时会出现预期的结果。
我的 view.py 文件 来自SomeDBModel导入模型 来自django.db导入连接
def index(request, someid):
#Some related django-style query that works here
loc = getLocationPath(someid, 1)
print(loc)
def getLocationPath(id, someval):
cursor = connection.cursor()
cursor.callproc("SomeDB.spGetLocationPath", [id, someval])
results = cursor.fetchall()
cursor.close()
return results
我也尝试过:
from SomeDBModel import models
from django.db import connections
def index(request, someid):
#Some related Django-style query that works here
loc = getLocationPath(someid, 1)
print(loc)
def getLocationPath(id, someval):
cursor = connections["SomeDB"].cursor()
cursor.callproc("spGetLocationPath", [id, someval])
results = cursor.fetchall()
cursor.close()
return results
每次打印结果时,我都会得到:
[]
应检索的数据示例:
{
Path: '/some/path/',
LocalPath: 'S:\Some\local\Path',
Folder: 'SomeFolderName',
Code: 'SomeCode'
}
我还尝试过的一件事是打印 cursor.callproc 的结果。我明白了:
(id, someval)
此外,打印 cursor._executed 的结果会给出:
b'SELECT @_SomeDB.spGetLocationPath_arg1, @_SomeDB.spGetLocationPath_arg2'
似乎没有任何对我想要运行的存储过程的引用。我甚至试过这个作为最后的手段:
cursor.execute("CALL spGetLocationPath("+str(id)+","+str(someval)+")")
但是我收到一个关于需要 multi = True 的错误,但是把它放在execute()函数中似乎没有像某些网站建议的那样工作,我不知道还有什么地方把它放在Django。
那么......我错过了什么想法?如何使存储过程正常工作?
答案 0 :(得分:1)
以下是我采取的步骤:
multi=True
最后,我继续研究 callproc 函数。最终,另一个网站上有人建议使用以下代码:
cur = connections["SomeDB"].cursor()
cur.callproc("spGetLocationPath", [id, someval])
res = next(cur.stored_results()).fetchall()
cur.close()