Почему я получаю PROCEDURE не существует при использовании callproc () в Django? - PullRequest
0 голосов
/ 17 ноября 2010

Поэтому я пытаюсь использовать хранимую процедуру с помощью курсора и callproc (), но всегда получаю сообщение об ошибке:

OperationalError: (1305, 'PROCEDURE myapp.LatLonDistance does not exist')

Вот фрагмент кода, который выдает ошибку в моем приложении:

cursor = connection.cursor()
result = cursor.callproc("myapp.LatLonDistance", (lat1, lon1, lat2, lon2))
cursor.close()

А вот прямой запрос, который я могу выполнить на БД, который прекрасно работает:

SELECT id,myapp.LatLonDistance(lat1, lon1, lat2, lon2) AS distance FROM myapp.users_userprofile;

А вот сценарий, который я использую для записи хранимой процедуры в БД:

delimiter //
CREATE FUNCTION airrun.LatLonDistance (lat1 double, lon1 double, lat2 double, lon2 double)
RETURNS double
DETERMINISTIC
READS SQL DATA
BEGIN

        DECLARE theta double;
        DECLARE dist double;
        DECLARE miles double;
        SET theta = lon1 - lon2; 
        SET dist = SIN(RADIANS(lat1)) * SIN(RADIANS(lat2)) + COS(RADIANS(lat1)) * COS(RADIANS(lat2)) * COS(RADIANS(theta)); 
        SET dist = ACOS(dist); 
        SET dist = DEGREES(dist); 
        SET miles = dist * 60 * 1.1515;


        RETURN miles;
END
//
delimiter ;

Использование базы данных MySQL.Есть мысли?

1 Ответ

3 голосов
/ 18 ноября 2010

Поскольку это функция, а не хранимая процедура, вы должны иметь возможность вызывать ее, используя cursor.execute:

cursor = connection.cursor()
result = cursor.execute("SELECT id,myapp.LatLonDistance(%s, %s, %s, %s) AS distance FROM myapp.users_userprofile", (lat1, lon1, lat2, lon2))
cursor.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...