0

我正在尝试从 django 执行以下非常简单的存储过程。我实际上要运行一个更复杂的,但我用这个作为测试让它运行。如果我直接从 mysql 执行它,SP 就可以工作,但是当我尝试从 django 执行它时,它什么也不做。没有错误,什么都没有。起初我以为可能是权限,但站点可以很好地读取和写入数据库。我尝试在 django 中将其作为原始 sql 执行,也没有任何反应。我试图将语法错误引入 SP 以查看它是否连接。它检测到语法错误,因此 django 连接到 SP。但它根本不会执行。这是django代码:

def priceupdate(request, store_id):

    cur = connection.cursor()
    try:
        cur.callproc('liquorDB.Test_scheduler')

    finally:
        cur.close()

    return HttpResponseRedirect(request.META.get('HTTP_REFERER'))

这是存储过程:

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `Test_scheduler`()
BEGIN
update liquorDB.store_store set Address = '45 Test' where StoreID = 1;

END
4

1 回答 1

1

对于那些也在寻找这个答案的人,我已经弄清楚了。您可以在 Google 中找到的存储过程代码基于检索数据而不是修改它。我的存储过程是为了修改而设计的。我在查看原始 sql 查询的 django 文档时找到了答案。https://docs.djangoproject.com/en/1.5/topics/db/sql/那里说如果你想让你的 sql 修改数据库上的某些东西,你必须添加一个 transaction.commit,如下所示:

cur.callproc('liquorDB.Test_scheduler')
transaction.commit_unless_managed()
于 2013-11-10T16:31:31.077 回答