0

次の非常に単純なストアド プロシージャを django から実行しようとしています。実際にはもっと複雑なものを実行する予定ですが、これをテストとして使用して実行しています。SPは、mysqlから直接実行すると機能しますが、djangoから実行しようとすると何もしません。エラーはありません。最初はパーミッションだと思っていましたが、サイトはデータベースを読み書きできます。djangoで生のSQLとして実行してみましたが、何も起こりません。SPに構文エラーを導入して、接続できるかどうかを確認しようとしました。構文エラーが検出されるため、django は SP に接続します。しかし、それは単に実行されません。ジャンゴコードは次のとおりです。

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 に答える