我正在尝试在Python 3中执行一个游标,该游标将在表中创建一个新列“Total_TU”,并且该列应根据其他两列中的行自动获取每行的值:“CU_per_TU”和“恩”。 “Total_TU”=“CU_per_TU”*“TU”
列“Total_TU”和“TU”是同时创建的,我需要在更新列“TU”后更新列“Total_TU”。
SQL 语法错误出现在最后一个cursor.execute 语句中。
我正在尝试这段代码,我在其他主题和手册中看到过该代码,但是最后一个cursor.execute 命令出现 SQL 语法错误,而且我不明白问题出在哪里。
这是代码
import mysql.connector
conn = connection_forward_db
cursor = conn.cursor()
cursor.execute("CREATE TABLE IF NOT EXISTS AC_forwarders.table_a AS SELECT * FROM `temp`")
cursor.execute("ALTER TABLE AC_forwarders.table_a ADD TU INT, ADD Total_CU INT")
cursor.execute("UPDATE table_a SET TU = "+int(x)+" WHERE Product_ID = aaa")
cursor.execute("""CREATE TRIGGER Total_TU_update BEFORE UPDATE ON table_a
FOR EACH ROW BEGIN
SET new.Total_TU = new.CU_per_TU * new.TU;
END~
CREATE TRIGGER Total_TU_insert BEFORE INSERT ON table_a
OR EACH ROW BEGIN
SET new.Total_TU = new.CU_per_TU * new.TU;
END~""")
conn.commit()
在用值更新 TU 后,Total_TU 列必须根据 CU_per_TU 和 TU 进行更新。
这是完整的错误(我只运行最后一个光标,其他 3 个光标工作正常):
MySQLInterfaceError Traceback(最近一次调用最后一次) cmd_query 中的/anaconda3/lib/python3.6/site-packages/mysql/connector/connection_cext.py( self ,查询,原始,缓冲,raw_as_string) 第394章 --> 395 raw_as_string = raw_as_string) [第 396 章]
MySQLInterfaceError:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在 '~
附近使用的正确语法在表_a上插入之前创建触发器Total_TU_insert 或者每行开始 ' 在第 4 行
在处理上述异常的过程中,又发生了一个异常:
编程错误回溯(最近一次调用最后一次) 在 () 17 或每行开始 18 SET new.Total_TU = new.CU_per_TU * new.TU; ---> 19 结束~""") 20 21 conn.commit()
/anaconda3/lib/python3.6/site-packages/mysql/connector/cursor_cext.py 在执行( self ,操作,参数,多) 第264章 第265章 --> 266 raw_as_string=self._raw_as_string) 267 除了 MySQLInterfaceError 之外: 268 引发错误。get_mysql_exception(msg=exc.msg, errno=exc.errno,
cmd_query 中的/anaconda3/lib/python3.6/site-packages/mysql/connector/connection_cext.py(self, query, raw, buffered, raw_as_string) 第396章 第397章 --> 398 sqlstate=exc.sqlstate) 399 除了属性错误: 400 如果 self._unix_socket:
编程错误:1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在 '~
附近使用的正确语法在表_a上插入之前创建触发器Total_TU_insert 或者每行开始 ' 在第 4 行
最佳答案
非常感谢 P.Salmon!
是的,现在我调整代码后就可以了:
cursor.execute("""CREATE TRIGGER Total_TU_update BEFORE UPDATE ON table_a
FOR EACH ROW
SET new.Total_TU = new.CU_per_TU * new.TU;""")
cursor.execute("""CREATE TRIGGER Total_TU_insert BEFORE INSERT ON table_a
FOR EACH ROW
SET new.Total_TU = new.CU_per_TU * new.TU;""")
conn.commit()
P.S 表中存在其他依赖列,我只是没有提及它们,因为它们没有问题:)
关于mysql - 在 Python 中使用 mysql.connector 执行 MySQL 触发器,该触发器计算值并将其插入到现有表中新创建的列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56965681/