You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用mysql-connector-python在MariaDB中创建含分隔符的复杂触发器?

解决mysql-connector-python创建MariaDB触发器的1064语法错误

问题根源

DELIMITER是MySQL/MariaDB客户端(如Workbench、mysql命令行)的专属命令,用于临时修改语句分隔符,方便定义包含分号的存储过程、触发器等。但mysql-connector-python这类驱动不会解析该命令,直接执行带DELIMITER的SQL会触发1064语法错误。\G同样是客户端命令,仅用于格式化输出,无法替代DELIMITER解决问题。

解决方案

直接编写完整的触发器SQL语句(无需DELIMITER命令),将其作为单个字符串传入cursor.execute()方法即可。数据库服务器本身能正确识别触发器定义体内的分号,不需要额外修改分隔符。

代码示例

import mysql.connector

# 建立数据库连接
conn = mysql.connector.connect(
    host="你的数据库地址",
    user="用户名",
    password="密码",
    database="目标数据库"
)
cursor = conn.cursor()

# 定义触发器SQL(无需DELIMITER)
trigger_sql = """
CREATE TRIGGER after_user_insert AFTER INSERT ON users
FOR EACH ROW
BEGIN
    INSERT INTO user_logs(user_id, operation, create_time)
    VALUES(NEW.id, 'insert', NOW());
END
"""

try:
    cursor.execute(trigger_sql)
    conn.commit()
    print("触发器创建成功")
except mysql.connector.Error as e:
    print(f"创建失败: {e.msg}")
finally:
    # 关闭游标和连接
    cursor.close()
    conn.close()

补充说明

如果触发器体内包含多个SQL语句,直接保留语句末尾的分号即可,驱动会将整个触发器定义作为一个完整的命令发送给服务器,服务器能正确解析。

内容的提问来源于stack exchange,提问作者Itération 122442

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 18:35:23