【发布时间】:2022-03-19 02:03:55
【问题描述】:
我想通过迁移来定义一个存储过程。在此之前我试图设置分隔符但得到django.db.utils.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER $$' at line 1")
代码:
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('...', '...'),
]
operations = [
migrations.RunSQL("DELIMITER $$"),
# ...
migrations.RunSQL("DELIMITER ;"),
]
我发现information 关于DELIMITER 是一个客户端关键字,特定工具可能不支持,但django 中的正确方法是什么?
【问题讨论】:
-
DELIMITER 是 not SQL 语句类型。这是客户端命令。阅读 Django 手册并搜索如何重新定义默认语句分隔符。
-
@Akina 它取决于底层的 mysql 连接器,而不是 django,因为连接器是 mysql 客户端。
-
我会简单地将带有整个主体和结束端的 create procedure 语句传递给 runsql。
-
@Shadow,谢谢,它奏效了。但是为什么示例包含分隔符重新定义?
-
因为不是所有的客户都可以在没有它的情况下工作。