Как запустить хранимую процедуру mysql в django с двумя выходными параметрами при получении данных через REST API? - PullRequest
1 голос
/ 24 июня 2019

Я работаю над проектом django, где мне нужно использовать хранимую процедуру для обновления нескольких таблиц, и она дает два выходных параметра.Существует четыре входных параметра из REST api.

Процедура работает правильно в phpmyadmin / MySql.

В чистом Python-скрипте он не обновляет необходимые таблицы, но выдает правильные выходные данные.

В Django я не могу запустить процедуру.

Я просто хочу знать, как правильно установить выходные параметры и выполнить процедуру в django.

Я пробовал это в отдельном скрипте Python, но он только дает выходные параметры и не 'обновить таблицы.В djando я попытался отредактировать views.py.

чистый скрипт на python:

import mysql.connector
from mysql.connector import Error
from mysql.connector import errorcode

var1 = " "
var2 = " "

try:
    mySQL_conn = mysql.connector.connect(host='192.111.11.111',
                                   database='Safemode',
                                   user='root',
                                   password='password here')
    cursor = mySQL_conn.cursor()
    x = cursor.callproc('ProcessIOTData',[1,2,"3","2019-06- 
                                           21T11:56:33Z",var1,var2])

    for result in cursor.stored_results():
        print(result.fetchall())

    for output in x:
    print(x)

except mysql.connector.Error as error:
    print("Failed to execute stored procedure: {}".format(error))
finally:

    if (mySQL_conn.is_connected()):
        cursor.close()
        mySQL_conn.close()
        print("connection is closed")

IN Django (views.py).Я также не сохранил данные из API, поскольку это также будет сделано процедура:

.
.
.
from django.db import connection


class IotTrackerListView(viewsets.ViewSet):
.
.
.
def post(self, request, *args, **kwargs):
    serializer = IotTrackerSerializer(data=request.data)

    var1=" "
    var2=" "


    cur = connection.cursor()  
    x=cur.callproc('ProcessIOTData', [request.data['iotiid'],request.data['sensortype'],request.data['sensordata'],request.data['trackingtime'],var1,var2]) 

    cur.execute('ProcessIOTData')
    result.fetchall()
    for incident in x:
        print(incident)
    cur.close()

    if serializer.is_valid():
        ##### serializer.save()
        return Response(serializer.data, 
                                     status=status.HTTP_201_CREATED)
    return Response(serializer.errors,
                                 status=status.HTTP_400_BAD_REQUEST)

Процедура:

ProcessIOTData`(In pIOTIID Int(15),
In pSensorType Int(1),
In pSensorData VarChar(25),
IN pIncidentTime DateTime,
Out pStatus Int(1),
Out pIncidentIID Int(15))

Параметры API:

{
        "iottrackiid": 9,
        "iotiid": 1,
        "trackingtime": "2019-06-21T11:56:31Z",
        "sensortype": 5,
        "sensordata": "0"
 }

В django не возникает ошибок без какого-либо типа вывода, когда через API публикуется новый набор данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...