Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Triggers 使用Connector/Python-MySQL创建触发器_Triggers_Python 3.6_Mysql 8.0 - Fatal编程技术网

Triggers 使用Connector/Python-MySQL创建触发器

Triggers 使用Connector/Python-MySQL创建触发器,triggers,python-3.6,mysql-8.0,Triggers,Python 3.6,Mysql 8.0,此代码在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 ;

此代码在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/”附近的正确语法 为第1行的每一行“在MYTABLE上插入之前创建触发器mytrigger”


请帮助出现此问题的任何其他人(或近11个月后询问者仍有可能遇到此问题):

分隔符
仅是CLI的一项功能(而不是服务器本身),因此各种连接器不知道如何处理它。我最终解决了同样的问题,删除了
分隔符
语句和依赖于它的任何内容,并将整个触发器语句移动到一行上一次执行。因为它都在一次执行中,连接器确定分号不会结束stateme新界

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()