python - 为什么在 Django 中使用 callproc() 时出现 PROCEDURE 不存在?

标签 python mysql django

所以我尝试通过游标和 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 数据库。有什么想法吗?

最佳答案

由于这是一个函数,而不是实际上的存储过程,因此您应该能够使用 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()

关于python - 为什么在 Django 中使用 callproc() 时出现 PROCEDURE 不存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4208807/

相关文章:

python - GCloud 命令行从不同帐户执行时出现错误

PHP MySQL : How to determine if value already exists in database

django - 我如何存储锦标赛排名

python - 从数据库填充 ChoiceField

python - 如何在管理中使用 Django-autocomplete-light 作为外键

python - iPython:类似操作的命令

python - 如何获取所有非空行值的列名?

python - 如何从单个 Flask 路由执行两个 SQL 命令

Docker 容器内的 MySQL 服务无法在 macOS Sierra 10.12.6 中运行

mysql - 如何根据mysql中的重复列获取所有行并将其存储到单行中