Я пытаюсь в Python 3 выполнить курсор, который создаст новый столбец «Total_TU» в таблице, и этот столбец должен автоматически получать значения для каждой строки на основе строк из двух других столбцов: «CU_per_TU» и «ТОТ»."Total_TU" = "CU_per_TU" * "TU"
Столбцы "Total_TU" и "TU" создаются одновременно, и мне нужно обновить столбец "Total_TU" после обновления столбца "TU",
Ошибка синтаксиса SQL содержится в последнем операторе cursor.execute.
Я пытаюсь использовать этот код, который я видел в других темах и руководствах, но получаю ошибку синтаксиса SQLдля последней команды cursor.execute, и я не понимаю, в чем проблема.
Вот код
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()
Столбец Total_TU должен обновляться на основе CU_per_TU и TU послеTU обновляется значением.
Вот полная ошибка (я запускаю только последний курсор, так как 3 других работают нормально):
MySQLInterfaceError Traceback (самый последний вызовпоследний) /anaconda3/lib/python3.6/site-packages/mysql/connector/connection_cext.py в cmd_query (self, query, raw, buffered, raw_as_string) 394 raw = raw, buffered = buffered, -> 395 raw_as_string =raw_as_string) 396 за исключением MySQLInterfaceError as exc:
MySQLInterfaceError: в синтаксисе SQL имеется ошибка;обратитесь к руководству, соответствующему вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования около '~
CREATE TRIGGER Total_TU_insert ПЕРЕД ВСТАВКОЙ ВКЛ. table_a ИЛИ КАЖДАЯ СТРОКА НАЧИНАЕТСЯ в строке 4
Во время обработкивыше исключения, произошло другое исключение:
ProgrammingError Traceback (последний последний вызов) в () 17 ИЛИ КАЖДАЯ СТРОКА НАЧИНАЕТСЯ 18 SET new.Total_TU = new.CU_per_TU * new.TU;---> 19 END ~ "" ") 20 21 conn.commit ()
/ anaconda3 / lib / python3.6 / site-packages / mysql / connector / cursor_cext.py в execute (self, операция, params, multi) 264 result = self._cnx.cmd_query (stmt, raw = self._raw, 265 buffered = self._buffered, -> 266 raw_as_string = self._raw_as_string) 267 за исключением MySQLInterfaceError, так как исключение: 268 повышает ошибки.get_mysql_exception(msg = exc.msg, errno = exc.errno,
/ anaconda3 / lib / python3.6 / site-packages / mysql / connector / connection_cext.py в cmd_query (self, query, raw, buffered,raw_as_string) 396 за исключением MySQLInterfaceError как исключение: 397 вызывает error.get_mysql_exception (exc.errno, msg = exc.msg, -> 398 sqlstate = exc.sqlstate) 399 кроме AttributeError: 400, если self._unix_socket:
ProgrammingError: 1064 (42000): у вас есть ошибка в вашем синтаксисе SQL, проверьте правильность синтаксиса для руководства, соответствующего вашей версии сервера MySQL, для значения, близкого к '~
CREATE TRIGGER Total_TU_insert ПЕРЕД ВСТАВКОЙ НА table_a ИЛИ КАЖДОЙСтрока начинается в строке 4