gpt4 book ai didi

triggers - 使用连接器/Python 创建触发器 - MySQL

转载 作者:行者123 更新时间:2023-12-05 03:05:46 30 4
gpt4 key购买 nike

此代码在 MYSQLWorkbench 中正常工作。

use MYDB
drop trigger if exists mytrigger
delimiter //
CREATE TRIGGER mytrigger BEFORE INSERT ON MYTABLE FOR EACH ROW
BEGIN
IF (select COUNT(*) from MYTABLE) = 12 THEN
SET NEW.COL2 = 10;
END IF;
END;//
delimiter ;

MYTABLE 有两列 (COL1,COL2)

我想通过 python 创建这个触发器,所以我用 python 编写了这段代码:

import mysql.connector

cnx = mysql.connector.connect(user='root', password='root', host='127.0.0.1', database='mysql')
cursor = cnx.cursor()
DB_NAME = 'MYDB'
Table_Name= 'MYTABLE'
cursor.execute("CREATE DATABASE IF NOT EXISTS " + str(DB_NAME))
cnx.commit()
cursor.execute("USE " + str(DB_NAME))
cnx.commit()
cursor.execute("CREATE TABLE IF NOT EXISTS " + str(Table_Name) + " ("
" `COL1` BIGINT(20) NOT NULL ,"
" `COL2` varchar(20) NOT NULL,"
" PRIMARY KEY (`COL1`)"
") ENGINE=InnoDB")
cnx.commit()
cursor.execute(" drop trigger if exists mytrigger")
qrystr = (" delimiter // \n"
" CREATE TRIGGER mytrigger BEFORE INSERT ON MYTABLE FOR EACH ROW \n"
" BEGIN \n"
" IF (select COUNT(*) from MYTABLE) = 12 THEN \n"
" SET NEW.COL2 = 10;\n"
" END IF;\n"
" END;//\n"
" delimiter ; \n")
cursor.execute(qrystr)
cnx.commit()
cnx.close()

但是这个错误发生了:((((((((((((((((((((((((((((((

错误:您的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册,了解在 'delimiter//附近使用的正确语法 CREATE TRIGGER mytrigger BEFORE INSERT ON MYTABLE FOR EACH ROW ' 在第 1 行

请帮忙

最佳答案

对于遇到此问题的任何其他人(或者在将近 11 个月后这对提问者来说仍然是一个问题的机会):

DELIMITER 只是 CLI 的一个功能(不是服务器本身),因此各种连接器不知道如何处理它。我最终解决了同样的问题,方法是删除 DELIMITER 语句和依赖它的任何内容,并将整个触发器语句移动到一行以立即执行。因为全部在一次执行中,连接器确定分号不结束语句。

cursor.execute(" drop trigger if exists mytrigger")

## NEW CODE ##
qrystr = "CREATE TRIGGER mytrigger BEFORE INSERT ON MYTABLE FOR EACH ROW BEGIN IF (select COUNT(*) from MYTABLE) = 12 THEN SET NEW.COL2 = 10; END IF; END"
##############

cursor.execute(qrystr)
cnx.commit()
cnx.close()

关于triggers - 使用连接器/Python 创建触发器 - MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50462279/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com