如何使用mysql-connector-python向MariaDB插入一个“复杂的”(带分隔符指令)触发器?

fykwrbwg  于 2023-01-30  发布在  Mysql
关注(0)|答案(1)|浏览(89)

我希望在MariaDB 5.5.68中创建一个触发器。
基于这个官方示例,我构建了这个查询:

query = ("""
DELIMITER //
create trigger set_uuid_query
before insert on DLMNT.QUERY for each row
begin
    if new.id is null then
        set new.id = uuid() ;
    end if ;
end//
DELIMITER ;
""")
cursor = mydb.cursor()
cursor.execute(query)
for e in cursor:
    print(e)

然而,虽然这在MariaDB 5.5.64中通过MySQL Workbench运行良好,但会抛出:

1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'DELIMITER //
create trigger set_uuid_query
before insert on DLMNT.QUERY for each' at line 1

恐怕这是不可能的。虽然它是关于MySQL的,但X1 E0 F1 X声明,定界器是客户端的东西。
此外,根据this doc的最后一行,我认为“\G”可以用作分隔符,但this answer声明了完全不同的内容(当我尝试使用它时,无论如何它都会抛出完全相同的错误)。
那么,使用这个Python库,我怎样才能进行这样的查询呢?
PS:我正在使用的lib是:mysql-连接器-Python 8.0.27

k75qkfdt

k75qkfdt1#

当使用python(或任何其他)连接器时,您不需要使用DELIMITER来创建触发器。DELIMITER是 * 命令行客户端 * 的特殊技巧。命令行客户端希望知道何时向服务器发送潜在的多行输入查询。通常它可以依赖于字符串末尾的分号,但在“复杂”语句(如触发器和存储过程)的情况下就不行了。

相关问题