Error : Invalid ON UPDATE clause for 'update_time' column

本文解决MySQL 5.5版本中更新时间戳字段的问题,由于该版本限制,无法直接设置自动更新时间戳。提供了一种通过创建触发器来实现自动更新时间戳的方法。

 

这是因为mysql版本低导致的,只有5.5的会有这个问题,5.6不会有这个问题。

 

可以使用触发器来替代一下:

 

 

CREATE TABLE `example` (
  `id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  `created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `lastUpdated` DATETIME NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;
DROP TRIGGER IF EXISTS `update_example_trigger`;
DELIMITER //
CREATE TRIGGER `update_example_trigger` BEFORE UPDATE ON `example`
 FOR EACH ROW SET NEW.`lastUpdated` = NOW()
//
DELIMITER ;

 

参考链接

 

 

 

 

import sqlite3 import oracledb from datetime import datetime, timedelta import logging # Dictionary mapping table names to their primary keys TABLE_PRIMARY_KEYS = { "OEE_AvaiableTime": "OEE_AvaiableTimeId", "OEE_CycleTime": "OEE_CycleTimeId", "OEE_CycleTime_Config": "OEE_CycleTimeConfigId", "OEE_LineReport": "OEE_LineReportId", "OEE_PerformanceComment": "OEE_PerformanceCommentId", "OEE_ProductStatus": "OEE_ProductStatusId", "OEE_Quality": "OEE_QualityId", "OEE_ShiftPlan_Config": "OEE_ShiftPlanConfigId", "OEE_ShiftWorkTime": "OEE_ShiftWorkTimeId", "OEE_Target_Config": "OEE_TargetConfigId" } def sync_sqlite_to_oracle(sqlite_db, oracle_dsn, username, password, tables): """ Synchronize data from SQLite to Oracle database. :param sqlite_db: Path to SQLite database file :param oracle_dsn: Oracle connection string :param username: Oracle username :param password: Oracle password :param tables: List of tables to synchronize """ # Configure logging logging.basicConfig(filename='db_sync.log', level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') # Calculate time range (previous day) now = datetime.now() ### debug testing ### now = datetime(year=2025, month=10, day=10, hour=8, minute=20, second=0) logging.info(f"now: {now} ") start_time = (now - timedelta(days=1)).strftime('%Y-%m-%d 08:30:00') end_time = (now - timedelta(days=0)).strftime('%Y-%m-%d 08:30:00') logging.info(f"Sync datetime: {start_time} to {end_time}") try: # Connect to SQLite database sqlite_conn = sqlite3.connect(sqlite_db) sqlite_cursor = sqlite_conn.cursor() # Connect to Oracle database oracle_conn = oracledb.connect(user=username, password=password, dsn=oracle_dsn) oracle_cursor = oracle_conn.cursor() # Iterate through all tables for table in tables: # Get the primary key for the current table primary_key = TABLE_PRIMARY_KEYS.get(table) if not primary_key: logging.error(f"Primary key not defined for table: {table}") continue logging.info(f"Begin DB Table : {table}, Primary key: {primary_key}") inserted = 0 updated = 0 # Get SQLite table structure sqlite_cursor.execute(f"PRAGMA table_info({table})") columns = [col[1] for col in sqlite_cursor.fetchall()] # Get Oracle table structure (check if table exists) oracle_cursor.execute(f""" SELECT column_name FROM user_tab_columns WHERE table_name = UPPER('{table}') """) oracle_columns = [col[0].lower() for col in oracle_cursor.fetchall()] # If Oracle table does not exist, create it (currently commented out) # if not oracle_columns: # logging.info(f" {table} in oracle not found, creating new table") # create_table_sql = generate_create_table_sql(sqlite_cursor, table) # oracle_cursor.execute(create_table_sql) # oracle_conn.commit() # oracle_columns = columns # Query records from SQLite updated in the previous day sqlite_cursor.execute(f""" SELECT * FROM {table} WHERE UpdateAt BETWEEN ? AND ? """, (start_time, end_time)) rows = sqlite_cursor.fetchall() # Process each record for row in rows: row_dict = dict(zip(columns, row)) # Check if record exists in Oracle (using primary key) oracle_cursor.execute(f""" SELECT COUNT(*) FROM {table} WHERE {primary_key} = :pk_value """, pk_value=row_dict[primary_key]) exists = oracle_cursor.fetchone()[0] > 0 if exists: # Update record (excluding primary key field) update_sql = generate_update_sql(table, columns, primary_key) update_params = {col: row_dict[col] for col in columns if col != primary_key} update_params["pk_condition"] = row_dict[primary_key] oracle_cursor.execute(update_sql, update_params) updated += 1 else: # Insert new record insert_sql = generate_insert_sql(table, columns) oracle_cursor.execute(insert_sql, tuple(row_dict.values())) inserted += 1 # Commit transaction oracle_conn.commit() logging.info(f" {table} sync done: add {inserted} , update {updated} ") logging.info("All Table Sync done!") except Exception as e: logging.error(f"Sync error: {str(e)}") if 'oracle_conn' in locals(): oracle_conn.rollback() finally: # Close connections if 'sqlite_conn' in locals(): sqlite_conn.close() if 'oracle_conn' in locals(): oracle_conn.close() # def generate_create_table_sql(cursor, table_name): # """Generate SQL statement to create table""" # cursor.execute(f"SELECT sql FROM sqlite_master WHERE type='table' AND name='{table_name}'") # create_sql = cursor.fetchone()[0] # # Convert data types # create_sql = create_sql.replace('INTEGER', 'NUMBER(10)') # create_sql = create_sql.replace('REAL', 'NUMBER(20,10)') # create_sql = create_sql.replace('TEXT', 'VARCHAR2(4000)') # create_sql = create_sql.replace('BLOB', 'BLOB') # return create_sql def generate_insert_sql(table, columns): """Generate SQL INSERT statement""" cols = ", ".join(columns) placeholders = ", ".join([f":{i+1}" for i in range(len(columns))]) return f"INSERT INTO {table} ({cols}) VALUES ({placeholders})" def generate_update_sql(table, columns, primary_key): """Generate SQL UPDATE statement (excluding primary key)""" update_columns = [col for col in columns if col != primary_key] set_clause = ", ".join([f"{col} = :{col}" for col in update_columns]) return f"UPDATE {table} SET {set_clause} WHERE {primary_key} = :pk_condition" if __name__ == "__main__": # Configuration parameters SQLITE_DB = "D:\\IISwebOEE\\App_Data\\webFrameworkEF6.db" ORACLE_DSN = "at3-pacc-f2db.zf-world.com/AT3PACC2" USERNAME = "acc_oee2" PASSWORD = "accZF_2025" # List of tables to synchronize TABLES = [ "OEE_AvaiableTime", "OEE_CycleTime", "OEE_LineReport", "OEE_PerformanceComment", "OEE_ProductStatus", "OEE_Quality", "OEE_ShiftPlan_Config", "OEE_ShiftWorkTime", "OEE_Target_Config", "OEE_CycleTime_Config" ] # Execute synchronization sync_sqlite_to_oracle(SQLITE_DB, ORACLE_DSN, USERNAME, PASSWORD, TABLES)插入Oracle 数据库 时候 ,发送 ORA-01747 错误
11-07
基地址: 0x765149d000 任务: 31096 任务: 31102 任务: 31103 任务: 31105 任务: 31106 任务: 31107 任务: 31109 任务: 31117 任务: 31120 任务: 31126 任务: 31127 任务: 31131 任务: 31140 任务: 31147 任务: 31148 任务: 31175 任务: 31176 任务: 31178 任务: 31200 任务: 31209 任务: 31224 任务: 31225 任务: 31226 任务: 31230 任务: 31236 任务: 31241 任务: 31242 任务: 31244 任务: 31249 任务: 31250 任务: 31251 任务: 31252 任务: 31255 任务: 31260 任务: 31274 任务: 31275 任务: 31276 任务: 31296 任务: 31297 任务: 31302 任务: 31314 任务: 31321 任务: 31327 任务: 31339 任务: 31364 任务: 31366 任务: 31367 任务: 31370 任务: 31371 任务: 31372 任务: 31373 任务: 31378 任务: 31382 任务: 31383 任务: 31384 任务: 31385 任务: 31387 任务: 31388 任务: 31389 任务: 31390 任务: 31403 任务: 31405 任务: 31406 任务: 31407 任务: 31408 任务: 31409 任务: 31418 任务: 31419 任务: 31421 任务: 31432 任务: 31434 任务: 31435 任务: 31436 任务: 31440 任务: 31441 任务: 31442 任务: 31443 任务: 31444 任务: 31445 任务: 31446 任务: 31451 任务: 31461 任务: 31467 任务: 31468 任务: 31469 任务: 31471 任务: 31472 任务: 31547 任务: 31548 任务: 31578 任务: 31581 任务: 31585 任务: 31586 任务: 31587 任务: 31591 任务: 31592 任务: 31594 任务: 31595 任务: 31596 任务: 31601 任务: 31602 任务: 31604 任务: 31605 任务: 31606 任务: 31607 任务: 31608 任务: 31609 任务: 31611 任务: 31613 任务: 31618 任务: 31621 任务: 31625 任务: 31626 任务: 31627 任务: 31628 任务: 31629 任务: 31635 任务: 31692 任务: 31693 任务: 31712 任务: 31713 任务: 31714 任务: 31730 任务: 31731 任务: 31732 任务: 31733 任务: 31734 任务: 31761 任务: 31763 任务: 31764 任务: 31765 任务: 31766 任务: 31767 任务: 31774 任务: 31780 任务: 31800 任务: 31801 任务: 31802 任务: 31822 任务: 31824 任务: 31831 任务: 31859 任务: 31860 任务: 31862 任务: 31863 任务: 31864 任务: 31868 任务: 31873 任务: 31875 任务: 31876 任务: 31879 任务: 31884 任务: 31890 任务: 31892 任务: 31894 任务: 31895 任务: 31897 任务: 31900 任务: 31903 任务: 31917 任务: 31925 任务: 31930 任务: 31944 任务: 31959 任务: 31969 任务: 31973 任务: 31976 任务: 31981 任务: 32049 任务: 32051 任务: 32063 任务: 32064 任务: 32102 任务: 32107 任务: 32108 任务: 32109 任务: 32110 任务: 32158 任务: 32161 任务: 32206 任务: 32208 任务: 32209 任务: 32218 任务: 32219 任务: 32220 任务: 32223 任务: 32224 任务: 32226 任务: 32228 任务: 32230 任务: 32231 任务: 32233 任务: 32235 任务: 32239 任务: 32240 任务: 32247 任务: 32253 任务: 32256 任务: 32273 任务: 32327 任务: 32329 任务: 32330 任务: 32333 任务: 32347 任务: 32425 任务: 32450 任务: 32451 perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument perf_event_open error: Invalid argument 监控已启动,按任意键退出... perf_event_open error: Invalid argument perf_event_open error: Invalid argument Segmentation fault 进行断点后出现问题 怎么解决。帮我修复好完整发给我
07-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值