1141 lines
74 KiB
Plaintext
1141 lines
74 KiB
Plaintext
2025-09-05 15:19:24,600 - manual_migration - INFO - 开始手动添加 location_type 字段...
|
||
2025-09-05 15:19:24,601 - manual_migration - INFO - 开始添加 location_type 字段...
|
||
2025-09-05 15:19:24,633 - manual_migration - INFO - 正在添加 location_type 字段...
|
||
2025-09-05 15:19:24,670 - manual_migration - INFO - ✅ location_type 字段添加成功
|
||
2025-09-05 15:19:24,670 - manual_migration - INFO - 正在为现有记录设置默认值...
|
||
2025-09-05 15:19:24,670 - manual_migration - INFO - ✅ 已为 0 条记录设置为物理库位(location_type = 1)
|
||
2025-09-05 15:19:24,671 - manual_migration - INFO - 验证结果:总记录数 32,物理库位 32,逻辑库位 0
|
||
2025-09-05 15:19:24,671 - manual_migration - INFO - 🎉 location_type 字段添加完成!
|
||
2025-09-05 15:19:24,671 - manual_migration - INFO - 显示更新后的表结构:
|
||
2025-09-05 15:19:24,673 - manual_migration - INFO - vwed_operate_point_layer 表结构:
|
||
2025-09-05 15:19:24,673 - manual_migration - INFO - Field Type Null Key Default Extra
|
||
2025-09-05 15:19:24,673 - manual_migration - INFO - --------------------------------------------------------------------------------
|
||
2025-09-05 15:19:24,673 - manual_migration - INFO - id char(64) NO PRI None
|
||
2025-09-05 15:19:24,673 - manual_migration - INFO - operate_point_id char(64) NO MUL None
|
||
2025-09-05 15:19:24,673 - manual_migration - INFO - station_name varchar(64) NO None
|
||
2025-09-05 15:19:24,673 - manual_migration - INFO - area_name varchar(64) YES None
|
||
2025-09-05 15:19:24,673 - manual_migration - INFO - scene_id varchar(64) NO None
|
||
2025-09-05 15:19:24,673 - manual_migration - INFO - layer_index int NO None
|
||
2025-09-05 15:19:24,673 - manual_migration - INFO - layer_name varchar(64) YES None
|
||
2025-09-05 15:19:24,673 - manual_migration - INFO - is_occupied tinyint(1) NO None
|
||
2025-09-05 15:19:24,673 - manual_migration - INFO - goods_content varchar(100) NO None
|
||
2025-09-05 15:19:24,673 - manual_migration - INFO - goods_weight int YES None
|
||
2025-09-05 15:19:24,673 - manual_migration - INFO - goods_volume int YES None
|
||
2025-09-05 15:19:24,673 - manual_migration - INFO - is_locked tinyint(1) NO None
|
||
2025-09-05 15:19:24,673 - manual_migration - INFO - is_disabled tinyint(1) NO None
|
||
2025-09-05 15:19:24,673 - manual_migration - INFO - is_empty_tray tinyint(1) NO None
|
||
2025-09-05 15:19:24,673 - manual_migration - INFO - locked_by varchar(128) YES None
|
||
2025-09-05 15:19:24,673 - manual_migration - INFO - tags varchar(255) YES None
|
||
2025-09-05 15:19:24,673 - manual_migration - INFO - max_weight int YES None
|
||
2025-09-05 15:19:24,673 - manual_migration - INFO - max_volume int YES None
|
||
2025-09-05 15:19:24,673 - manual_migration - INFO - layer_height int YES None
|
||
2025-09-05 15:19:24,673 - manual_migration - INFO - goods_stored_at datetime YES None
|
||
2025-09-05 15:19:24,673 - manual_migration - INFO - goods_retrieved_at datetime YES None
|
||
2025-09-05 15:19:24,673 - manual_migration - INFO - last_access_at datetime YES None
|
||
2025-09-05 15:19:24,673 - manual_migration - INFO - description text YES None
|
||
2025-09-05 15:19:24,673 - manual_migration - INFO - config_json text YES None
|
||
2025-09-05 15:19:24,673 - manual_migration - INFO - created_at datetime(6) YES None
|
||
2025-09-05 15:19:24,673 - manual_migration - INFO - updated_at datetime(6) YES None
|
||
2025-09-05 15:19:24,673 - manual_migration - INFO - is_deleted tinyint(1) YES None
|
||
2025-09-05 15:19:24,673 - manual_migration - INFO - location_type int NO 1
|
||
2025-09-05 15:19:24,674 - manual_migration - INFO - ✅ 迁移成功完成!
|
||
2025-09-11 19:35:47,683 - migration - INFO - 开始执行数据库自动迁移...
|
||
2025-09-11 19:35:47,683 - utils.db_migration - INFO - 开始数据库迁移
|
||
2025-09-11 19:35:47,732 - utils.db_migration - INFO - 发现 23 个模型
|
||
2025-09-11 19:35:47,751 - utils.db_migration - INFO - 表 vwed_script_api_registration 不存在,准备创建
|
||
2025-09-11 19:35:47,753 - utils.db_migration - ERROR - [logger.py:235] - error() - 创建表 vwed_script_api_registration 失败: (pymysql.err.OperationalError) (1824, "Failed to open the referenced table 'vwed_script_file'")
|
||
[SQL:
|
||
CREATE TABLE vwed_script_api_registration (
|
||
id INTEGER NOT NULL COMMENT '注册记录ID' AUTO_INCREMENT,
|
||
script_id VARCHAR(255) NOT NULL COMMENT '脚本实例ID',
|
||
file_id INTEGER NOT NULL COMMENT '脚本文件ID',
|
||
route_path VARCHAR(500) NOT NULL COMMENT '路由路径',
|
||
http_method VARCHAR(20) NOT NULL COMMENT 'HTTP方法: GET, POST, PUT, DELETE等',
|
||
handler_name VARCHAR(255) NOT NULL COMMENT '处理函数名',
|
||
description TEXT COMMENT '接口描述',
|
||
parameters JSON COMMENT '接口参数定义',
|
||
response_schema JSON COMMENT '响应格式定义',
|
||
is_active BOOL COMMENT '是否激活',
|
||
call_count INTEGER COMMENT '调用次数',
|
||
last_called_at DATETIME COMMENT '最后调用时间',
|
||
average_response_time_ms INTEGER COMMENT '平均响应时间(毫秒)',
|
||
created_at DATETIME NOT NULL COMMENT '注册时间',
|
||
PRIMARY KEY (id),
|
||
FOREIGN KEY(file_id) REFERENCES vwed_script_file (id)
|
||
)
|
||
|
||
]
|
||
(Background on this error at: https://sqlalche.me/e/20/e3q8)
|
||
Traceback (most recent call last):
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 1964, in _exec_single_context
|
||
self.dialect.do_execute(
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\default.py", line 942, in do_execute
|
||
cursor.execute(statement, parameters)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\cursors.py", line 153, in execute
|
||
result = self._query(query)
|
||
^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\cursors.py", line 322, in _query
|
||
conn.query(q)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\connections.py", line 563, in query
|
||
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\connections.py", line 825, in _read_query_result
|
||
result.read()
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\connections.py", line 1199, in read
|
||
first_packet = self.connection._read_packet()
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\connections.py", line 775, in _read_packet
|
||
packet.raise_for_error()
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\protocol.py", line 219, in raise_for_error
|
||
err.raise_mysql_exception(self._data)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\err.py", line 150, in raise_mysql_exception
|
||
raise errorclass(errno, errval)
|
||
pymysql.err.OperationalError: (1824, "Failed to open the referenced table 'vwed_script_file'")
|
||
|
||
The above exception was the direct cause of the following exception:
|
||
|
||
Traceback (most recent call last):
|
||
File "D:\jsw_code\project\VWED_server\utils\db_migration.py", line 75, in create_table
|
||
model.__table__.create(self.engine)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\sql\schema.py", line 1289, in create
|
||
bind._run_ddl_visitor(ddl.SchemaGenerator, self, checkfirst=checkfirst)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 3249, in _run_ddl_visitor
|
||
conn._run_ddl_visitor(visitorcallable, element, **kwargs)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 2456, in _run_ddl_visitor
|
||
visitorcallable(self.dialect, self, **kwargs).traverse_single(element)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\sql\visitors.py", line 664, in traverse_single
|
||
return meth(obj, **kw)
|
||
^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\sql\ddl.py", line 1016, in visit_table
|
||
)._invoke_with(self.connection)
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\sql\ddl.py", line 314, in _invoke_with
|
||
return bind.execute(self)
|
||
^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 1416, in execute
|
||
return meth(
|
||
^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\sql\ddl.py", line 180, in _execute_on_connection
|
||
return connection._execute_ddl(
|
||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 1527, in _execute_ddl
|
||
ret = self._execute_context(
|
||
^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 1843, in _execute_context
|
||
return self._exec_single_context(
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 1983, in _exec_single_context
|
||
self._handle_dbapi_exception(
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 2352, in _handle_dbapi_exception
|
||
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 1964, in _exec_single_context
|
||
self.dialect.do_execute(
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\default.py", line 942, in do_execute
|
||
cursor.execute(statement, parameters)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\cursors.py", line 153, in execute
|
||
result = self._query(query)
|
||
^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\cursors.py", line 322, in _query
|
||
conn.query(q)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\connections.py", line 563, in query
|
||
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\connections.py", line 825, in _read_query_result
|
||
result.read()
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\connections.py", line 1199, in read
|
||
first_packet = self.connection._read_packet()
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\connections.py", line 775, in _read_packet
|
||
packet.raise_for_error()
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\protocol.py", line 219, in raise_for_error
|
||
err.raise_mysql_exception(self._data)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\err.py", line 150, in raise_mysql_exception
|
||
raise errorclass(errno, errval)
|
||
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1824, "Failed to open the referenced table 'vwed_script_file'")
|
||
[SQL:
|
||
CREATE TABLE vwed_script_api_registration (
|
||
id INTEGER NOT NULL COMMENT '注册记录ID' AUTO_INCREMENT,
|
||
script_id VARCHAR(255) NOT NULL COMMENT '脚本实例ID',
|
||
file_id INTEGER NOT NULL COMMENT '脚本文件ID',
|
||
route_path VARCHAR(500) NOT NULL COMMENT '路由路径',
|
||
http_method VARCHAR(20) NOT NULL COMMENT 'HTTP方法: GET, POST, PUT, DELETE等',
|
||
handler_name VARCHAR(255) NOT NULL COMMENT '处理函数名',
|
||
description TEXT COMMENT '接口描述',
|
||
parameters JSON COMMENT '接口参数定义',
|
||
response_schema JSON COMMENT '响应格式定义',
|
||
is_active BOOL COMMENT '是否激活',
|
||
call_count INTEGER COMMENT '调用次数',
|
||
last_called_at DATETIME COMMENT '最后调用时间',
|
||
average_response_time_ms INTEGER COMMENT '平均响应时间(毫秒)',
|
||
created_at DATETIME NOT NULL COMMENT '注册时间',
|
||
PRIMARY KEY (id),
|
||
FOREIGN KEY(file_id) REFERENCES vwed_script_file (id)
|
||
)
|
||
|
||
]
|
||
(Background on this error at: https://sqlalche.me/e/20/e3q8)
|
||
Stack (most recent call last):
|
||
File "D:\jsw_code\project\VWED_server\scripts\run_migration.py", line 64, in <module>
|
||
main()
|
||
File "D:\jsw_code\project\VWED_server\scripts\run_migration.py", line 53, in main
|
||
success = run_migration()
|
||
File "D:\jsw_code\project\VWED_server\utils\db_migration.py", line 203, in run_migration
|
||
migration.migrate()
|
||
File "D:\jsw_code\project\VWED_server\utils\db_migration.py", line 181, in migrate
|
||
self.create_table(model)
|
||
File "D:\jsw_code\project\VWED_server\utils\db_migration.py", line 79, in create_table
|
||
logger.error(f"创建表 {model.__tablename__} 失败: {str(e)}")
|
||
File "D:\jsw_code\project\VWED_server\utils\logger.py", line 235, in error
|
||
self.logger.error(message, *args, exc_info=exc_info, stack_info=stack_info, **kwargs)
|
||
2025-09-11 19:35:48,199 - services.sync_service - INFO - 没有缓存的token,正在获取...
|
||
2025-09-11 19:35:48,200 - services.sync_service - INFO - 正在获取登录token,用户: vwed
|
||
2025-09-11 19:35:48,200 - utils.db_migration - INFO - 表 vwed_script_execution_log 不存在,准备创建
|
||
2025-09-11 19:35:48,203 - utils.db_migration - ERROR - [logger.py:235] - error() - 创建表 vwed_script_execution_log 失败: (pymysql.err.OperationalError) (1824, "Failed to open the referenced table 'vwed_script_file'")
|
||
[SQL:
|
||
CREATE TABLE vwed_script_execution_log (
|
||
id INTEGER NOT NULL COMMENT '日志ID' AUTO_INCREMENT,
|
||
script_id VARCHAR(255) NOT NULL COMMENT '脚本实例ID',
|
||
file_id INTEGER NOT NULL COMMENT '脚本文件ID',
|
||
execution_type VARCHAR(50) NOT NULL COMMENT '执行类型: start_service, stop_service, function_call, api_call',
|
||
function_name VARCHAR(255) COMMENT '执行的函数名',
|
||
input_params JSON COMMENT '输入参数',
|
||
output_result JSON COMMENT '输出结果',
|
||
status VARCHAR(20) NOT NULL COMMENT '执行状态: running, success, failed, timeout',
|
||
error_message TEXT COMMENT '错误信息',
|
||
error_traceback TEXT COMMENT '错误堆栈',
|
||
start_time DATETIME NOT NULL COMMENT '开始时间',
|
||
end_time DATETIME COMMENT '结束时间',
|
||
duration_ms INTEGER COMMENT '执行时长(毫秒)',
|
||
memory_usage_mb FLOAT COMMENT '内存使用(MB)',
|
||
cpu_usage_percent FLOAT COMMENT 'CPU使用率(%%)',
|
||
log_level VARCHAR(20) COMMENT '日志级别: DEBUG, INFO, WARNING, ERROR',
|
||
tags JSON COMMENT '标签信息',
|
||
created_at DATETIME NOT NULL COMMENT '创建时间',
|
||
PRIMARY KEY (id),
|
||
FOREIGN KEY(file_id) REFERENCES vwed_script_file (id)
|
||
)
|
||
|
||
]
|
||
(Background on this error at: https://sqlalche.me/e/20/e3q8)
|
||
Traceback (most recent call last):
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 1964, in _exec_single_context
|
||
self.dialect.do_execute(
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\default.py", line 942, in do_execute
|
||
cursor.execute(statement, parameters)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\cursors.py", line 153, in execute
|
||
result = self._query(query)
|
||
^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\cursors.py", line 322, in _query
|
||
conn.query(q)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\connections.py", line 563, in query
|
||
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\connections.py", line 825, in _read_query_result
|
||
result.read()
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\connections.py", line 1199, in read
|
||
first_packet = self.connection._read_packet()
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\connections.py", line 775, in _read_packet
|
||
packet.raise_for_error()
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\protocol.py", line 219, in raise_for_error
|
||
err.raise_mysql_exception(self._data)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\err.py", line 150, in raise_mysql_exception
|
||
raise errorclass(errno, errval)
|
||
pymysql.err.OperationalError: (1824, "Failed to open the referenced table 'vwed_script_file'")
|
||
|
||
The above exception was the direct cause of the following exception:
|
||
|
||
Traceback (most recent call last):
|
||
File "D:\jsw_code\project\VWED_server\utils\db_migration.py", line 75, in create_table
|
||
model.__table__.create(self.engine)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\sql\schema.py", line 1289, in create
|
||
bind._run_ddl_visitor(ddl.SchemaGenerator, self, checkfirst=checkfirst)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 3249, in _run_ddl_visitor
|
||
conn._run_ddl_visitor(visitorcallable, element, **kwargs)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 2456, in _run_ddl_visitor
|
||
visitorcallable(self.dialect, self, **kwargs).traverse_single(element)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\sql\visitors.py", line 664, in traverse_single
|
||
return meth(obj, **kw)
|
||
^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\sql\ddl.py", line 1016, in visit_table
|
||
)._invoke_with(self.connection)
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\sql\ddl.py", line 314, in _invoke_with
|
||
return bind.execute(self)
|
||
^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 1416, in execute
|
||
return meth(
|
||
^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\sql\ddl.py", line 180, in _execute_on_connection
|
||
return connection._execute_ddl(
|
||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 1527, in _execute_ddl
|
||
ret = self._execute_context(
|
||
^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 1843, in _execute_context
|
||
return self._exec_single_context(
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 1983, in _exec_single_context
|
||
self._handle_dbapi_exception(
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 2352, in _handle_dbapi_exception
|
||
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 1964, in _exec_single_context
|
||
self.dialect.do_execute(
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\default.py", line 942, in do_execute
|
||
cursor.execute(statement, parameters)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\cursors.py", line 153, in execute
|
||
result = self._query(query)
|
||
^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\cursors.py", line 322, in _query
|
||
conn.query(q)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\connections.py", line 563, in query
|
||
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\connections.py", line 825, in _read_query_result
|
||
result.read()
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\connections.py", line 1199, in read
|
||
first_packet = self.connection._read_packet()
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\connections.py", line 775, in _read_packet
|
||
packet.raise_for_error()
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\protocol.py", line 219, in raise_for_error
|
||
err.raise_mysql_exception(self._data)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\err.py", line 150, in raise_mysql_exception
|
||
raise errorclass(errno, errval)
|
||
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1824, "Failed to open the referenced table 'vwed_script_file'")
|
||
[SQL:
|
||
CREATE TABLE vwed_script_execution_log (
|
||
id INTEGER NOT NULL COMMENT '日志ID' AUTO_INCREMENT,
|
||
script_id VARCHAR(255) NOT NULL COMMENT '脚本实例ID',
|
||
file_id INTEGER NOT NULL COMMENT '脚本文件ID',
|
||
execution_type VARCHAR(50) NOT NULL COMMENT '执行类型: start_service, stop_service, function_call, api_call',
|
||
function_name VARCHAR(255) COMMENT '执行的函数名',
|
||
input_params JSON COMMENT '输入参数',
|
||
output_result JSON COMMENT '输出结果',
|
||
status VARCHAR(20) NOT NULL COMMENT '执行状态: running, success, failed, timeout',
|
||
error_message TEXT COMMENT '错误信息',
|
||
error_traceback TEXT COMMENT '错误堆栈',
|
||
start_time DATETIME NOT NULL COMMENT '开始时间',
|
||
end_time DATETIME COMMENT '结束时间',
|
||
duration_ms INTEGER COMMENT '执行时长(毫秒)',
|
||
memory_usage_mb FLOAT COMMENT '内存使用(MB)',
|
||
cpu_usage_percent FLOAT COMMENT 'CPU使用率(%%)',
|
||
log_level VARCHAR(20) COMMENT '日志级别: DEBUG, INFO, WARNING, ERROR',
|
||
tags JSON COMMENT '标签信息',
|
||
created_at DATETIME NOT NULL COMMENT '创建时间',
|
||
PRIMARY KEY (id),
|
||
FOREIGN KEY(file_id) REFERENCES vwed_script_file (id)
|
||
)
|
||
|
||
]
|
||
(Background on this error at: https://sqlalche.me/e/20/e3q8)
|
||
Stack (most recent call last):
|
||
File "D:\jsw_code\project\VWED_server\scripts\run_migration.py", line 64, in <module>
|
||
main()
|
||
File "D:\jsw_code\project\VWED_server\scripts\run_migration.py", line 53, in main
|
||
success = run_migration()
|
||
File "D:\jsw_code\project\VWED_server\utils\db_migration.py", line 203, in run_migration
|
||
migration.migrate()
|
||
File "D:\jsw_code\project\VWED_server\utils\db_migration.py", line 181, in migrate
|
||
self.create_table(model)
|
||
File "D:\jsw_code\project\VWED_server\utils\db_migration.py", line 79, in create_table
|
||
logger.error(f"创建表 {model.__tablename__} 失败: {str(e)}")
|
||
File "D:\jsw_code\project\VWED_server\utils\logger.py", line 235, in error
|
||
self.logger.error(message, *args, exc_info=exc_info, stack_info=stack_info, **kwargs)
|
||
2025-09-11 19:35:48,205 - services.sync_service - ERROR - [logger.py:235] - error() - 调用登录接口失败: Header part (1000) from ('X-Tenant-Id', 1000) must be of type str or bytes, not <class 'int'>
|
||
Traceback (most recent call last):
|
||
File "D:\jsw_code\project\VWED_server\services\sync_service.py", line 1009, in get_login_token_sync
|
||
response = requests.post(
|
||
^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\api.py", line 115, in post
|
||
return request("post", url, data=data, json=json, **kwargs)
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\api.py", line 59, in request
|
||
return session.request(method=method, url=url, **kwargs)
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\sessions.py", line 575, in request
|
||
prep = self.prepare_request(req)
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\sessions.py", line 484, in prepare_request
|
||
p.prepare(
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\models.py", line 368, in prepare
|
||
self.prepare_headers(headers)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\models.py", line 490, in prepare_headers
|
||
check_header_validity(header)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\utils.py", line 1042, in check_header_validity
|
||
_validate_header_part(header, value, 1)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\utils.py", line 1051, in _validate_header_part
|
||
raise InvalidHeader(
|
||
requests.exceptions.InvalidHeader: Header part (1000) from ('X-Tenant-Id', 1000) must be of type str or bytes, not <class 'int'>
|
||
Stack (most recent call last):
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\threading.py", line 1032, in _bootstrap
|
||
self._bootstrap_inner()
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\threading.py", line 1075, in _bootstrap_inner
|
||
self.run()
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\threading.py", line 1012, in run
|
||
self._target(*self._args, **self._kwargs)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\concurrent\futures\thread.py", line 93, in _worker
|
||
work_item.run()
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\concurrent\futures\thread.py", line 59, in run
|
||
result = self.fn(*self.args, **self.kwargs)
|
||
File "D:\jsw_code\project\VWED_server\utils\alert_sync.py", line 206, in _send_alert_to_main_system
|
||
token = get_tf_api_token_sync()
|
||
File "D:\jsw_code\project\VWED_server\utils\alert_sync.py", line 28, in get_tf_api_token_sync
|
||
token = refresh_token_if_needed_sync()
|
||
File "D:\jsw_code\project\VWED_server\services\sync_service.py", line 1068, in refresh_token_if_needed_sync
|
||
return get_login_token_sync()
|
||
File "D:\jsw_code\project\VWED_server\services\sync_service.py", line 1042, in get_login_token_sync
|
||
logger.error(f"调用登录接口失败: {str(e)}")
|
||
File "D:\jsw_code\project\VWED_server\utils\logger.py", line 235, in error
|
||
self.logger.error(message, *args, exc_info=exc_info, stack_info=stack_info, **kwargs)
|
||
2025-09-11 19:35:48,212 - services.sync_service - INFO - 没有缓存的token,正在获取...
|
||
2025-09-11 19:35:48,212 - utils.db_migration - INFO - 表 vwed_script_file 不存在,准备创建
|
||
2025-09-11 19:35:48,219 - services.sync_service - INFO - 正在获取登录token,用户: vwed
|
||
2025-09-11 19:35:48,220 - services.sync_service - ERROR - [logger.py:235] - error() - 调用登录接口失败: Header part (1000) from ('X-Tenant-Id', 1000) must be of type str or bytes, not <class 'int'>
|
||
Traceback (most recent call last):
|
||
File "D:\jsw_code\project\VWED_server\services\sync_service.py", line 1009, in get_login_token_sync
|
||
response = requests.post(
|
||
^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\api.py", line 115, in post
|
||
return request("post", url, data=data, json=json, **kwargs)
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\api.py", line 59, in request
|
||
return session.request(method=method, url=url, **kwargs)
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\sessions.py", line 575, in request
|
||
prep = self.prepare_request(req)
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\sessions.py", line 484, in prepare_request
|
||
p.prepare(
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\models.py", line 368, in prepare
|
||
self.prepare_headers(headers)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\models.py", line 490, in prepare_headers
|
||
check_header_validity(header)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\utils.py", line 1042, in check_header_validity
|
||
_validate_header_part(header, value, 1)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\utils.py", line 1051, in _validate_header_part
|
||
raise InvalidHeader(
|
||
requests.exceptions.InvalidHeader: Header part (1000) from ('X-Tenant-Id', 1000) must be of type str or bytes, not <class 'int'>
|
||
Stack (most recent call last):
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\threading.py", line 1032, in _bootstrap
|
||
self._bootstrap_inner()
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\threading.py", line 1075, in _bootstrap_inner
|
||
self.run()
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\threading.py", line 1012, in run
|
||
self._target(*self._args, **self._kwargs)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\concurrent\futures\thread.py", line 93, in _worker
|
||
work_item.run()
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\concurrent\futures\thread.py", line 59, in run
|
||
result = self.fn(*self.args, **self.kwargs)
|
||
File "D:\jsw_code\project\VWED_server\utils\alert_sync.py", line 206, in _send_alert_to_main_system
|
||
token = get_tf_api_token_sync()
|
||
File "D:\jsw_code\project\VWED_server\utils\alert_sync.py", line 28, in get_tf_api_token_sync
|
||
token = refresh_token_if_needed_sync()
|
||
File "D:\jsw_code\project\VWED_server\services\sync_service.py", line 1068, in refresh_token_if_needed_sync
|
||
return get_login_token_sync()
|
||
File "D:\jsw_code\project\VWED_server\services\sync_service.py", line 1042, in get_login_token_sync
|
||
logger.error(f"调用登录接口失败: {str(e)}")
|
||
File "D:\jsw_code\project\VWED_server\utils\logger.py", line 235, in error
|
||
self.logger.error(message, *args, exc_info=exc_info, stack_info=stack_info, **kwargs)
|
||
2025-09-11 19:35:48,221 - utils.db_migration - ERROR - [logger.py:235] - error() - 创建表 vwed_script_file 失败: (pymysql.err.OperationalError) (1824, "Failed to open the referenced table 'vwed_script_project'")
|
||
[SQL:
|
||
CREATE TABLE vwed_script_file (
|
||
id INTEGER NOT NULL COMMENT '文件ID' AUTO_INCREMENT,
|
||
project_id INTEGER NOT NULL COMMENT '所属项目ID',
|
||
file_name VARCHAR(255) NOT NULL COMMENT '文件名',
|
||
file_path VARCHAR(500) NOT NULL COMMENT '文件相对路径',
|
||
file_type VARCHAR(20) NOT NULL COMMENT '文件类型: python, text, json等',
|
||
content TEXT COMMENT '文件内容',
|
||
size INTEGER COMMENT '文件大小(字节)',
|
||
encoding VARCHAR(20) COMMENT '文件编码',
|
||
is_directory BOOL COMMENT '是否为目录',
|
||
is_executable BOOL COMMENT '是否可执行',
|
||
has_boot_function BOOL COMMENT '是否包含boot函数',
|
||
status VARCHAR(20) NOT NULL COMMENT '文件状态: active, deleted',
|
||
created_by VARCHAR(100) COMMENT '创建者',
|
||
created_at DATETIME NOT NULL COMMENT '创建时间',
|
||
updated_at DATETIME NOT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (id),
|
||
FOREIGN KEY(project_id) REFERENCES vwed_script_project (id)
|
||
)
|
||
|
||
]
|
||
(Background on this error at: https://sqlalche.me/e/20/e3q8)
|
||
Traceback (most recent call last):
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 1964, in _exec_single_context
|
||
self.dialect.do_execute(
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\default.py", line 942, in do_execute
|
||
cursor.execute(statement, parameters)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\cursors.py", line 153, in execute
|
||
result = self._query(query)
|
||
^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\cursors.py", line 322, in _query
|
||
conn.query(q)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\connections.py", line 563, in query
|
||
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\connections.py", line 825, in _read_query_result
|
||
result.read()
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\connections.py", line 1199, in read
|
||
first_packet = self.connection._read_packet()
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\connections.py", line 775, in _read_packet
|
||
packet.raise_for_error()
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\protocol.py", line 219, in raise_for_error
|
||
err.raise_mysql_exception(self._data)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\err.py", line 150, in raise_mysql_exception
|
||
raise errorclass(errno, errval)
|
||
pymysql.err.OperationalError: (1824, "Failed to open the referenced table 'vwed_script_project'")
|
||
|
||
The above exception was the direct cause of the following exception:
|
||
|
||
Traceback (most recent call last):
|
||
File "D:\jsw_code\project\VWED_server\utils\db_migration.py", line 75, in create_table
|
||
model.__table__.create(self.engine)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\sql\schema.py", line 1289, in create
|
||
bind._run_ddl_visitor(ddl.SchemaGenerator, self, checkfirst=checkfirst)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 3249, in _run_ddl_visitor
|
||
conn._run_ddl_visitor(visitorcallable, element, **kwargs)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 2456, in _run_ddl_visitor
|
||
visitorcallable(self.dialect, self, **kwargs).traverse_single(element)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\sql\visitors.py", line 664, in traverse_single
|
||
return meth(obj, **kw)
|
||
^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\sql\ddl.py", line 1016, in visit_table
|
||
)._invoke_with(self.connection)
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\sql\ddl.py", line 314, in _invoke_with
|
||
return bind.execute(self)
|
||
^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 1416, in execute
|
||
return meth(
|
||
^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\sql\ddl.py", line 180, in _execute_on_connection
|
||
return connection._execute_ddl(
|
||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 1527, in _execute_ddl
|
||
ret = self._execute_context(
|
||
^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 1843, in _execute_context
|
||
return self._exec_single_context(
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 1983, in _exec_single_context
|
||
self._handle_dbapi_exception(
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 2352, in _handle_dbapi_exception
|
||
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 1964, in _exec_single_context
|
||
self.dialect.do_execute(
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\default.py", line 942, in do_execute
|
||
cursor.execute(statement, parameters)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\cursors.py", line 153, in execute
|
||
result = self._query(query)
|
||
^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\cursors.py", line 322, in _query
|
||
conn.query(q)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\connections.py", line 563, in query
|
||
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\connections.py", line 825, in _read_query_result
|
||
result.read()
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\connections.py", line 1199, in read
|
||
first_packet = self.connection._read_packet()
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\connections.py", line 775, in _read_packet
|
||
packet.raise_for_error()
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\protocol.py", line 219, in raise_for_error
|
||
err.raise_mysql_exception(self._data)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\err.py", line 150, in raise_mysql_exception
|
||
raise errorclass(errno, errval)
|
||
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1824, "Failed to open the referenced table 'vwed_script_project'")
|
||
[SQL:
|
||
CREATE TABLE vwed_script_file (
|
||
id INTEGER NOT NULL COMMENT '文件ID' AUTO_INCREMENT,
|
||
project_id INTEGER NOT NULL COMMENT '所属项目ID',
|
||
file_name VARCHAR(255) NOT NULL COMMENT '文件名',
|
||
file_path VARCHAR(500) NOT NULL COMMENT '文件相对路径',
|
||
file_type VARCHAR(20) NOT NULL COMMENT '文件类型: python, text, json等',
|
||
content TEXT COMMENT '文件内容',
|
||
size INTEGER COMMENT '文件大小(字节)',
|
||
encoding VARCHAR(20) COMMENT '文件编码',
|
||
is_directory BOOL COMMENT '是否为目录',
|
||
is_executable BOOL COMMENT '是否可执行',
|
||
has_boot_function BOOL COMMENT '是否包含boot函数',
|
||
status VARCHAR(20) NOT NULL COMMENT '文件状态: active, deleted',
|
||
created_by VARCHAR(100) COMMENT '创建者',
|
||
created_at DATETIME NOT NULL COMMENT '创建时间',
|
||
updated_at DATETIME NOT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (id),
|
||
FOREIGN KEY(project_id) REFERENCES vwed_script_project (id)
|
||
)
|
||
|
||
]
|
||
(Background on this error at: https://sqlalche.me/e/20/e3q8)
|
||
Stack (most recent call last):
|
||
File "D:\jsw_code\project\VWED_server\scripts\run_migration.py", line 64, in <module>
|
||
main()
|
||
File "D:\jsw_code\project\VWED_server\scripts\run_migration.py", line 53, in main
|
||
success = run_migration()
|
||
File "D:\jsw_code\project\VWED_server\utils\db_migration.py", line 203, in run_migration
|
||
migration.migrate()
|
||
File "D:\jsw_code\project\VWED_server\utils\db_migration.py", line 181, in migrate
|
||
self.create_table(model)
|
||
File "D:\jsw_code\project\VWED_server\utils\db_migration.py", line 79, in create_table
|
||
logger.error(f"创建表 {model.__tablename__} 失败: {str(e)}")
|
||
File "D:\jsw_code\project\VWED_server\utils\logger.py", line 235, in error
|
||
self.logger.error(message, *args, exc_info=exc_info, stack_info=stack_info, **kwargs)
|
||
2025-09-11 19:35:48,225 - utils.db_migration - INFO - 表 vwed_script_function_registration 不存在,准备创建
|
||
2025-09-11 19:35:48,226 - utils.db_migration - ERROR - [logger.py:235] - error() - 创建表 vwed_script_function_registration 失败: (pymysql.err.OperationalError) (1824, "Failed to open the referenced table 'vwed_script_file'")
|
||
[SQL:
|
||
CREATE TABLE vwed_script_function_registration (
|
||
id INTEGER NOT NULL COMMENT '注册记录ID' AUTO_INCREMENT,
|
||
script_id VARCHAR(255) NOT NULL COMMENT '脚本实例ID',
|
||
file_id INTEGER NOT NULL COMMENT '脚本文件ID',
|
||
function_name VARCHAR(255) NOT NULL COMMENT '函数名',
|
||
handler_name VARCHAR(255) NOT NULL COMMENT '处理函数名(实际函数名)',
|
||
description TEXT COMMENT '函数描述',
|
||
parameters JSON COMMENT '参数定义: [{"name": "param1", "type": "str", "required": true}]',
|
||
return_schema JSON COMMENT '返回值格式定义',
|
||
is_async BOOL COMMENT '是否为异步函数',
|
||
is_active BOOL COMMENT '是否激活',
|
||
call_count INTEGER COMMENT '调用次数',
|
||
last_called_at DATETIME COMMENT '最后调用时间',
|
||
average_execution_time_ms INTEGER COMMENT '平均执行时间(毫秒)',
|
||
success_count INTEGER COMMENT '成功执行次数',
|
||
error_count INTEGER COMMENT '错误次数',
|
||
tags JSON COMMENT '函数标签',
|
||
created_at DATETIME NOT NULL COMMENT '注册时间',
|
||
PRIMARY KEY (id),
|
||
FOREIGN KEY(file_id) REFERENCES vwed_script_file (id)
|
||
)
|
||
|
||
]
|
||
(Background on this error at: https://sqlalche.me/e/20/e3q8)
|
||
Traceback (most recent call last):
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 1964, in _exec_single_context
|
||
self.dialect.do_execute(
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\default.py", line 942, in do_execute
|
||
cursor.execute(statement, parameters)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\cursors.py", line 153, in execute
|
||
result = self._query(query)
|
||
^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\cursors.py", line 322, in _query
|
||
conn.query(q)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\connections.py", line 563, in query
|
||
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\connections.py", line 825, in _read_query_result
|
||
result.read()
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\connections.py", line 1199, in read
|
||
first_packet = self.connection._read_packet()
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\connections.py", line 775, in _read_packet
|
||
packet.raise_for_error()
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\protocol.py", line 219, in raise_for_error
|
||
err.raise_mysql_exception(self._data)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\err.py", line 150, in raise_mysql_exception
|
||
raise errorclass(errno, errval)
|
||
pymysql.err.OperationalError: (1824, "Failed to open the referenced table 'vwed_script_file'")
|
||
|
||
The above exception was the direct cause of the following exception:
|
||
|
||
Traceback (most recent call last):
|
||
File "D:\jsw_code\project\VWED_server\utils\db_migration.py", line 75, in create_table
|
||
model.__table__.create(self.engine)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\sql\schema.py", line 1289, in create
|
||
bind._run_ddl_visitor(ddl.SchemaGenerator, self, checkfirst=checkfirst)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 3249, in _run_ddl_visitor
|
||
conn._run_ddl_visitor(visitorcallable, element, **kwargs)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 2456, in _run_ddl_visitor
|
||
visitorcallable(self.dialect, self, **kwargs).traverse_single(element)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\sql\visitors.py", line 664, in traverse_single
|
||
return meth(obj, **kw)
|
||
^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\sql\ddl.py", line 1016, in visit_table
|
||
)._invoke_with(self.connection)
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\sql\ddl.py", line 314, in _invoke_with
|
||
return bind.execute(self)
|
||
^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 1416, in execute
|
||
return meth(
|
||
^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\sql\ddl.py", line 180, in _execute_on_connection
|
||
return connection._execute_ddl(
|
||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 1527, in _execute_ddl
|
||
ret = self._execute_context(
|
||
^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 1843, in _execute_context
|
||
return self._exec_single_context(
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 1983, in _exec_single_context
|
||
self._handle_dbapi_exception(
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 2352, in _handle_dbapi_exception
|
||
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 1964, in _exec_single_context
|
||
self.dialect.do_execute(
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\default.py", line 942, in do_execute
|
||
cursor.execute(statement, parameters)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\cursors.py", line 153, in execute
|
||
result = self._query(query)
|
||
^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\cursors.py", line 322, in _query
|
||
conn.query(q)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\connections.py", line 563, in query
|
||
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\connections.py", line 825, in _read_query_result
|
||
result.read()
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\connections.py", line 1199, in read
|
||
first_packet = self.connection._read_packet()
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\connections.py", line 775, in _read_packet
|
||
packet.raise_for_error()
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\protocol.py", line 219, in raise_for_error
|
||
err.raise_mysql_exception(self._data)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\err.py", line 150, in raise_mysql_exception
|
||
raise errorclass(errno, errval)
|
||
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1824, "Failed to open the referenced table 'vwed_script_file'")
|
||
[SQL:
|
||
CREATE TABLE vwed_script_function_registration (
|
||
id INTEGER NOT NULL COMMENT '注册记录ID' AUTO_INCREMENT,
|
||
script_id VARCHAR(255) NOT NULL COMMENT '脚本实例ID',
|
||
file_id INTEGER NOT NULL COMMENT '脚本文件ID',
|
||
function_name VARCHAR(255) NOT NULL COMMENT '函数名',
|
||
handler_name VARCHAR(255) NOT NULL COMMENT '处理函数名(实际函数名)',
|
||
description TEXT COMMENT '函数描述',
|
||
parameters JSON COMMENT '参数定义: [{"name": "param1", "type": "str", "required": true}]',
|
||
return_schema JSON COMMENT '返回值格式定义',
|
||
is_async BOOL COMMENT '是否为异步函数',
|
||
is_active BOOL COMMENT '是否激活',
|
||
call_count INTEGER COMMENT '调用次数',
|
||
last_called_at DATETIME COMMENT '最后调用时间',
|
||
average_execution_time_ms INTEGER COMMENT '平均执行时间(毫秒)',
|
||
success_count INTEGER COMMENT '成功执行次数',
|
||
error_count INTEGER COMMENT '错误次数',
|
||
tags JSON COMMENT '函数标签',
|
||
created_at DATETIME NOT NULL COMMENT '注册时间',
|
||
PRIMARY KEY (id),
|
||
FOREIGN KEY(file_id) REFERENCES vwed_script_file (id)
|
||
)
|
||
|
||
]
|
||
(Background on this error at: https://sqlalche.me/e/20/e3q8)
|
||
Stack (most recent call last):
|
||
File "D:\jsw_code\project\VWED_server\scripts\run_migration.py", line 64, in <module>
|
||
main()
|
||
File "D:\jsw_code\project\VWED_server\scripts\run_migration.py", line 53, in main
|
||
success = run_migration()
|
||
File "D:\jsw_code\project\VWED_server\utils\db_migration.py", line 203, in run_migration
|
||
migration.migrate()
|
||
File "D:\jsw_code\project\VWED_server\utils\db_migration.py", line 181, in migrate
|
||
self.create_table(model)
|
||
File "D:\jsw_code\project\VWED_server\utils\db_migration.py", line 79, in create_table
|
||
logger.error(f"创建表 {model.__tablename__} 失败: {str(e)}")
|
||
File "D:\jsw_code\project\VWED_server\utils\logger.py", line 235, in error
|
||
self.logger.error(message, *args, exc_info=exc_info, stack_info=stack_info, **kwargs)
|
||
2025-09-11 19:35:48,228 - utils.db_migration - INFO - 表 vwed_script_project 不存在,准备创建
|
||
2025-09-11 19:35:48,270 - utils.db_migration - INFO - 创建表 vwed_script_project 成功
|
||
2025-09-11 19:35:48,270 - utils.db_migration - INFO - 表 vwed_script_registry 不存在,准备创建
|
||
2025-09-11 19:35:48,271 - utils.db_migration - ERROR - [logger.py:235] - error() - 创建表 vwed_script_registry 失败: (pymysql.err.OperationalError) (1824, "Failed to open the referenced table 'vwed_script_file'")
|
||
[SQL:
|
||
CREATE TABLE vwed_script_registry (
|
||
id INTEGER NOT NULL COMMENT '注册记录ID' AUTO_INCREMENT,
|
||
script_id VARCHAR(255) NOT NULL COMMENT '脚本实例ID',
|
||
file_id INTEGER NOT NULL COMMENT '脚本文件ID',
|
||
script_path VARCHAR(500) NOT NULL COMMENT '脚本相对路径',
|
||
status VARCHAR(20) NOT NULL COMMENT '运行状态: starting, running, stopping, stopped, error',
|
||
process_id VARCHAR(50) COMMENT '进程ID',
|
||
host_info JSON COMMENT '主机信息',
|
||
start_params JSON COMMENT '启动参数',
|
||
resource_limits JSON COMMENT '资源限制配置',
|
||
performance_stats JSON COMMENT '性能统计信息',
|
||
error_message TEXT COMMENT '错误信息',
|
||
api_count INTEGER COMMENT '注册的API数量',
|
||
function_count INTEGER COMMENT '注册的函数数量',
|
||
event_count INTEGER COMMENT '注册的事件监听器数量',
|
||
timer_count INTEGER COMMENT '注册的定时任务数量',
|
||
last_heartbeat DATETIME COMMENT '最后心跳时间',
|
||
started_at DATETIME NOT NULL COMMENT '启动时间',
|
||
stopped_at DATETIME COMMENT '停止时间',
|
||
created_at DATETIME NOT NULL COMMENT '创建时间',
|
||
updated_at DATETIME NOT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (id),
|
||
UNIQUE (script_id),
|
||
FOREIGN KEY(file_id) REFERENCES vwed_script_file (id)
|
||
)
|
||
|
||
]
|
||
(Background on this error at: https://sqlalche.me/e/20/e3q8)
|
||
Traceback (most recent call last):
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 1964, in _exec_single_context
|
||
self.dialect.do_execute(
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\default.py", line 942, in do_execute
|
||
cursor.execute(statement, parameters)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\cursors.py", line 153, in execute
|
||
result = self._query(query)
|
||
^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\cursors.py", line 322, in _query
|
||
conn.query(q)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\connections.py", line 563, in query
|
||
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\connections.py", line 825, in _read_query_result
|
||
result.read()
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\connections.py", line 1199, in read
|
||
first_packet = self.connection._read_packet()
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\connections.py", line 775, in _read_packet
|
||
packet.raise_for_error()
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\protocol.py", line 219, in raise_for_error
|
||
err.raise_mysql_exception(self._data)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\err.py", line 150, in raise_mysql_exception
|
||
raise errorclass(errno, errval)
|
||
pymysql.err.OperationalError: (1824, "Failed to open the referenced table 'vwed_script_file'")
|
||
|
||
The above exception was the direct cause of the following exception:
|
||
|
||
Traceback (most recent call last):
|
||
File "D:\jsw_code\project\VWED_server\utils\db_migration.py", line 75, in create_table
|
||
model.__table__.create(self.engine)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\sql\schema.py", line 1289, in create
|
||
bind._run_ddl_visitor(ddl.SchemaGenerator, self, checkfirst=checkfirst)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 3249, in _run_ddl_visitor
|
||
conn._run_ddl_visitor(visitorcallable, element, **kwargs)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 2456, in _run_ddl_visitor
|
||
visitorcallable(self.dialect, self, **kwargs).traverse_single(element)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\sql\visitors.py", line 664, in traverse_single
|
||
return meth(obj, **kw)
|
||
^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\sql\ddl.py", line 1016, in visit_table
|
||
)._invoke_with(self.connection)
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\sql\ddl.py", line 314, in _invoke_with
|
||
return bind.execute(self)
|
||
^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 1416, in execute
|
||
return meth(
|
||
^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\sql\ddl.py", line 180, in _execute_on_connection
|
||
return connection._execute_ddl(
|
||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 1527, in _execute_ddl
|
||
ret = self._execute_context(
|
||
^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 1843, in _execute_context
|
||
return self._exec_single_context(
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 1983, in _exec_single_context
|
||
self._handle_dbapi_exception(
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 2352, in _handle_dbapi_exception
|
||
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\base.py", line 1964, in _exec_single_context
|
||
self.dialect.do_execute(
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\sqlalchemy\engine\default.py", line 942, in do_execute
|
||
cursor.execute(statement, parameters)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\cursors.py", line 153, in execute
|
||
result = self._query(query)
|
||
^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\cursors.py", line 322, in _query
|
||
conn.query(q)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\connections.py", line 563, in query
|
||
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\connections.py", line 825, in _read_query_result
|
||
result.read()
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\connections.py", line 1199, in read
|
||
first_packet = self.connection._read_packet()
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\connections.py", line 775, in _read_packet
|
||
packet.raise_for_error()
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\protocol.py", line 219, in raise_for_error
|
||
err.raise_mysql_exception(self._data)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pymysql\err.py", line 150, in raise_mysql_exception
|
||
raise errorclass(errno, errval)
|
||
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1824, "Failed to open the referenced table 'vwed_script_file'")
|
||
[SQL:
|
||
CREATE TABLE vwed_script_registry (
|
||
id INTEGER NOT NULL COMMENT '注册记录ID' AUTO_INCREMENT,
|
||
script_id VARCHAR(255) NOT NULL COMMENT '脚本实例ID',
|
||
file_id INTEGER NOT NULL COMMENT '脚本文件ID',
|
||
script_path VARCHAR(500) NOT NULL COMMENT '脚本相对路径',
|
||
status VARCHAR(20) NOT NULL COMMENT '运行状态: starting, running, stopping, stopped, error',
|
||
process_id VARCHAR(50) COMMENT '进程ID',
|
||
host_info JSON COMMENT '主机信息',
|
||
start_params JSON COMMENT '启动参数',
|
||
resource_limits JSON COMMENT '资源限制配置',
|
||
performance_stats JSON COMMENT '性能统计信息',
|
||
error_message TEXT COMMENT '错误信息',
|
||
api_count INTEGER COMMENT '注册的API数量',
|
||
function_count INTEGER COMMENT '注册的函数数量',
|
||
event_count INTEGER COMMENT '注册的事件监听器数量',
|
||
timer_count INTEGER COMMENT '注册的定时任务数量',
|
||
last_heartbeat DATETIME COMMENT '最后心跳时间',
|
||
started_at DATETIME NOT NULL COMMENT '启动时间',
|
||
stopped_at DATETIME COMMENT '停止时间',
|
||
created_at DATETIME NOT NULL COMMENT '创建时间',
|
||
updated_at DATETIME NOT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (id),
|
||
UNIQUE (script_id),
|
||
FOREIGN KEY(file_id) REFERENCES vwed_script_file (id)
|
||
)
|
||
|
||
]
|
||
(Background on this error at: https://sqlalche.me/e/20/e3q8)
|
||
Stack (most recent call last):
|
||
File "D:\jsw_code\project\VWED_server\scripts\run_migration.py", line 64, in <module>
|
||
main()
|
||
File "D:\jsw_code\project\VWED_server\scripts\run_migration.py", line 53, in main
|
||
success = run_migration()
|
||
File "D:\jsw_code\project\VWED_server\utils\db_migration.py", line 203, in run_migration
|
||
migration.migrate()
|
||
File "D:\jsw_code\project\VWED_server\utils\db_migration.py", line 181, in migrate
|
||
self.create_table(model)
|
||
File "D:\jsw_code\project\VWED_server\utils\db_migration.py", line 79, in create_table
|
||
logger.error(f"创建表 {model.__tablename__} 失败: {str(e)}")
|
||
File "D:\jsw_code\project\VWED_server\utils\logger.py", line 235, in error
|
||
self.logger.error(message, *args, exc_info=exc_info, stack_info=stack_info, **kwargs)
|
||
2025-09-11 19:35:48,283 - utils.db_migration - INFO - 数据库迁移完成
|
||
2025-09-11 19:35:48,283 - utils.db_migration - INFO - 数据库迁移成功
|
||
2025-09-11 19:35:48,283 - migration - INFO - 数据库迁移成功完成!
|
||
2025-09-11 19:36:21,269 - services.sync_service - INFO - 没有缓存的token,正在获取...
|
||
2025-09-11 19:36:21,269 - services.sync_service - INFO - 正在获取登录token,用户: vwed
|
||
2025-09-11 19:36:21,271 - services.sync_service - ERROR - [logger.py:235] - error() - 调用登录接口失败: Header part (1000) from ('X-Tenant-Id', 1000) must be of type str or bytes, not <class 'int'>
|
||
Traceback (most recent call last):
|
||
File "D:\jsw_code\project\VWED_server\services\sync_service.py", line 1009, in get_login_token_sync
|
||
response = requests.post(
|
||
^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\api.py", line 115, in post
|
||
return request("post", url, data=data, json=json, **kwargs)
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\api.py", line 59, in request
|
||
return session.request(method=method, url=url, **kwargs)
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\sessions.py", line 575, in request
|
||
prep = self.prepare_request(req)
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\sessions.py", line 484, in prepare_request
|
||
p.prepare(
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\models.py", line 368, in prepare
|
||
self.prepare_headers(headers)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\models.py", line 490, in prepare_headers
|
||
check_header_validity(header)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\utils.py", line 1042, in check_header_validity
|
||
_validate_header_part(header, value, 1)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\utils.py", line 1051, in _validate_header_part
|
||
raise InvalidHeader(
|
||
requests.exceptions.InvalidHeader: Header part (1000) from ('X-Tenant-Id', 1000) must be of type str or bytes, not <class 'int'>
|
||
Stack (most recent call last):
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\threading.py", line 1032, in _bootstrap
|
||
self._bootstrap_inner()
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\threading.py", line 1075, in _bootstrap_inner
|
||
self.run()
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\threading.py", line 1012, in run
|
||
self._target(*self._args, **self._kwargs)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\concurrent\futures\thread.py", line 93, in _worker
|
||
work_item.run()
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\concurrent\futures\thread.py", line 59, in run
|
||
result = self.fn(*self.args, **self.kwargs)
|
||
File "D:\jsw_code\project\VWED_server\utils\alert_sync.py", line 206, in _send_alert_to_main_system
|
||
token = get_tf_api_token_sync()
|
||
File "D:\jsw_code\project\VWED_server\utils\alert_sync.py", line 28, in get_tf_api_token_sync
|
||
token = refresh_token_if_needed_sync()
|
||
File "D:\jsw_code\project\VWED_server\services\sync_service.py", line 1068, in refresh_token_if_needed_sync
|
||
return get_login_token_sync()
|
||
File "D:\jsw_code\project\VWED_server\services\sync_service.py", line 1042, in get_login_token_sync
|
||
logger.error(f"调用登录接口失败: {str(e)}")
|
||
File "D:\jsw_code\project\VWED_server\utils\logger.py", line 235, in error
|
||
self.logger.error(message, *args, exc_info=exc_info, stack_info=stack_info, **kwargs)
|
||
2025-09-11 19:36:21,284 - services.sync_service - INFO - 没有缓存的token,正在获取...
|
||
2025-09-11 19:36:21,335 - services.sync_service - INFO - 正在获取登录token,用户: vwed
|
||
2025-09-11 19:36:21,341 - services.sync_service - ERROR - [logger.py:235] - error() - 调用登录接口失败: Header part (1000) from ('X-Tenant-Id', 1000) must be of type str or bytes, not <class 'int'>
|
||
Traceback (most recent call last):
|
||
File "D:\jsw_code\project\VWED_server\services\sync_service.py", line 1009, in get_login_token_sync
|
||
response = requests.post(
|
||
^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\api.py", line 115, in post
|
||
return request("post", url, data=data, json=json, **kwargs)
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\api.py", line 59, in request
|
||
return session.request(method=method, url=url, **kwargs)
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\sessions.py", line 575, in request
|
||
prep = self.prepare_request(req)
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\sessions.py", line 484, in prepare_request
|
||
p.prepare(
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\models.py", line 368, in prepare
|
||
self.prepare_headers(headers)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\models.py", line 490, in prepare_headers
|
||
check_header_validity(header)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\utils.py", line 1042, in check_header_validity
|
||
_validate_header_part(header, value, 1)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\utils.py", line 1051, in _validate_header_part
|
||
raise InvalidHeader(
|
||
requests.exceptions.InvalidHeader: Header part (1000) from ('X-Tenant-Id', 1000) must be of type str or bytes, not <class 'int'>
|
||
Stack (most recent call last):
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\threading.py", line 1032, in _bootstrap
|
||
self._bootstrap_inner()
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\threading.py", line 1075, in _bootstrap_inner
|
||
self.run()
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\threading.py", line 1012, in run
|
||
self._target(*self._args, **self._kwargs)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\concurrent\futures\thread.py", line 93, in _worker
|
||
work_item.run()
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\concurrent\futures\thread.py", line 59, in run
|
||
result = self.fn(*self.args, **self.kwargs)
|
||
File "D:\jsw_code\project\VWED_server\utils\alert_sync.py", line 206, in _send_alert_to_main_system
|
||
token = get_tf_api_token_sync()
|
||
File "D:\jsw_code\project\VWED_server\utils\alert_sync.py", line 28, in get_tf_api_token_sync
|
||
token = refresh_token_if_needed_sync()
|
||
File "D:\jsw_code\project\VWED_server\services\sync_service.py", line 1068, in refresh_token_if_needed_sync
|
||
return get_login_token_sync()
|
||
File "D:\jsw_code\project\VWED_server\services\sync_service.py", line 1042, in get_login_token_sync
|
||
logger.error(f"调用登录接口失败: {str(e)}")
|
||
File "D:\jsw_code\project\VWED_server\utils\logger.py", line 235, in error
|
||
self.logger.error(message, *args, exc_info=exc_info, stack_info=stack_info, **kwargs)
|
||
2025-09-11 19:36:45,532 - services.sync_service - INFO - 没有缓存的token,正在获取...
|
||
2025-09-11 19:36:45,532 - services.sync_service - INFO - 正在获取登录token,用户: vwed
|
||
2025-09-11 19:36:45,532 - services.sync_service - ERROR - [logger.py:235] - error() - 调用登录接口失败: Header part (1000) from ('X-Tenant-Id', 1000) must be of type str or bytes, not <class 'int'>
|
||
Traceback (most recent call last):
|
||
File "D:\jsw_code\project\VWED_server\services\sync_service.py", line 1009, in get_login_token_sync
|
||
response = requests.post(
|
||
^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\api.py", line 115, in post
|
||
return request("post", url, data=data, json=json, **kwargs)
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\api.py", line 59, in request
|
||
return session.request(method=method, url=url, **kwargs)
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\sessions.py", line 575, in request
|
||
prep = self.prepare_request(req)
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\sessions.py", line 484, in prepare_request
|
||
p.prepare(
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\models.py", line 368, in prepare
|
||
self.prepare_headers(headers)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\models.py", line 490, in prepare_headers
|
||
check_header_validity(header)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\utils.py", line 1042, in check_header_validity
|
||
_validate_header_part(header, value, 1)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\utils.py", line 1051, in _validate_header_part
|
||
raise InvalidHeader(
|
||
requests.exceptions.InvalidHeader: Header part (1000) from ('X-Tenant-Id', 1000) must be of type str or bytes, not <class 'int'>
|
||
Stack (most recent call last):
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\threading.py", line 1032, in _bootstrap
|
||
self._bootstrap_inner()
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\threading.py", line 1075, in _bootstrap_inner
|
||
self.run()
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\threading.py", line 1012, in run
|
||
self._target(*self._args, **self._kwargs)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\concurrent\futures\thread.py", line 93, in _worker
|
||
work_item.run()
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\concurrent\futures\thread.py", line 59, in run
|
||
result = self.fn(*self.args, **self.kwargs)
|
||
File "D:\jsw_code\project\VWED_server\utils\alert_sync.py", line 206, in _send_alert_to_main_system
|
||
token = get_tf_api_token_sync()
|
||
File "D:\jsw_code\project\VWED_server\utils\alert_sync.py", line 28, in get_tf_api_token_sync
|
||
token = refresh_token_if_needed_sync()
|
||
File "D:\jsw_code\project\VWED_server\services\sync_service.py", line 1068, in refresh_token_if_needed_sync
|
||
return get_login_token_sync()
|
||
File "D:\jsw_code\project\VWED_server\services\sync_service.py", line 1042, in get_login_token_sync
|
||
logger.error(f"调用登录接口失败: {str(e)}")
|
||
File "D:\jsw_code\project\VWED_server\utils\logger.py", line 235, in error
|
||
self.logger.error(message, *args, exc_info=exc_info, stack_info=stack_info, **kwargs)
|
||
2025-09-11 19:36:46,026 - services.sync_service - INFO - 没有缓存的token,正在获取...
|
||
2025-09-11 19:36:46,026 - services.sync_service - INFO - 正在获取登录token,用户: vwed
|
||
2025-09-11 19:36:46,027 - services.sync_service - ERROR - [logger.py:235] - error() - 调用登录接口失败: Header part (1000) from ('X-Tenant-Id', 1000) must be of type str or bytes, not <class 'int'>
|
||
Traceback (most recent call last):
|
||
File "D:\jsw_code\project\VWED_server\services\sync_service.py", line 1009, in get_login_token_sync
|
||
response = requests.post(
|
||
^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\api.py", line 115, in post
|
||
return request("post", url, data=data, json=json, **kwargs)
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\api.py", line 59, in request
|
||
return session.request(method=method, url=url, **kwargs)
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\sessions.py", line 575, in request
|
||
prep = self.prepare_request(req)
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\sessions.py", line 484, in prepare_request
|
||
p.prepare(
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\models.py", line 368, in prepare
|
||
self.prepare_headers(headers)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\models.py", line 490, in prepare_headers
|
||
check_header_validity(header)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\utils.py", line 1042, in check_header_validity
|
||
_validate_header_part(header, value, 1)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\utils.py", line 1051, in _validate_header_part
|
||
raise InvalidHeader(
|
||
requests.exceptions.InvalidHeader: Header part (1000) from ('X-Tenant-Id', 1000) must be of type str or bytes, not <class 'int'>
|
||
Stack (most recent call last):
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\threading.py", line 1032, in _bootstrap
|
||
self._bootstrap_inner()
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\threading.py", line 1075, in _bootstrap_inner
|
||
self.run()
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\threading.py", line 1012, in run
|
||
self._target(*self._args, **self._kwargs)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\concurrent\futures\thread.py", line 93, in _worker
|
||
work_item.run()
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\concurrent\futures\thread.py", line 59, in run
|
||
result = self.fn(*self.args, **self.kwargs)
|
||
File "D:\jsw_code\project\VWED_server\utils\alert_sync.py", line 206, in _send_alert_to_main_system
|
||
token = get_tf_api_token_sync()
|
||
File "D:\jsw_code\project\VWED_server\utils\alert_sync.py", line 28, in get_tf_api_token_sync
|
||
token = refresh_token_if_needed_sync()
|
||
File "D:\jsw_code\project\VWED_server\services\sync_service.py", line 1068, in refresh_token_if_needed_sync
|
||
return get_login_token_sync()
|
||
File "D:\jsw_code\project\VWED_server\services\sync_service.py", line 1042, in get_login_token_sync
|
||
logger.error(f"调用登录接口失败: {str(e)}")
|
||
File "D:\jsw_code\project\VWED_server\utils\logger.py", line 235, in error
|
||
self.logger.error(message, *args, exc_info=exc_info, stack_info=stack_info, **kwargs)
|
||
2025-09-11 19:37:18,377 - services.sync_service - INFO - 没有缓存的token,正在获取...
|
||
2025-09-11 19:37:18,378 - services.sync_service - INFO - 正在获取登录token,用户: vwed
|
||
2025-09-11 19:37:18,378 - services.sync_service - ERROR - [logger.py:235] - error() - 调用登录接口失败: Header part (1000) from ('X-Tenant-Id', 1000) must be of type str or bytes, not <class 'int'>
|
||
Traceback (most recent call last):
|
||
File "D:\jsw_code\project\VWED_server\services\sync_service.py", line 1009, in get_login_token_sync
|
||
response = requests.post(
|
||
^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\api.py", line 115, in post
|
||
return request("post", url, data=data, json=json, **kwargs)
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\api.py", line 59, in request
|
||
return session.request(method=method, url=url, **kwargs)
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\sessions.py", line 575, in request
|
||
prep = self.prepare_request(req)
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\sessions.py", line 484, in prepare_request
|
||
p.prepare(
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\models.py", line 368, in prepare
|
||
self.prepare_headers(headers)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\models.py", line 490, in prepare_headers
|
||
check_header_validity(header)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\utils.py", line 1042, in check_header_validity
|
||
_validate_header_part(header, value, 1)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\requests\utils.py", line 1051, in _validate_header_part
|
||
raise InvalidHeader(
|
||
requests.exceptions.InvalidHeader: Header part (1000) from ('X-Tenant-Id', 1000) must be of type str or bytes, not <class 'int'>
|
||
Stack (most recent call last):
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\threading.py", line 1032, in _bootstrap
|
||
self._bootstrap_inner()
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\threading.py", line 1075, in _bootstrap_inner
|
||
self.run()
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\threading.py", line 1012, in run
|
||
self._target(*self._args, **self._kwargs)
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\concurrent\futures\thread.py", line 93, in _worker
|
||
work_item.run()
|
||
File "D:\Users\j2538\miniconda3\envs\pytf\Lib\concurrent\futures\thread.py", line 59, in run
|
||
result = self.fn(*self.args, **self.kwargs)
|
||
File "D:\jsw_code\project\VWED_server\utils\alert_sync.py", line 206, in _send_alert_to_main_system
|
||
token = get_tf_api_token_sync()
|
||
File "D:\jsw_code\project\VWED_server\utils\alert_sync.py", line 28, in get_tf_api_token_sync
|
||
token = refresh_token_if_needed_sync()
|
||
File "D:\jsw_code\project\VWED_server\services\sync_service.py", line 1068, in refresh_token_if_needed_sync
|
||
return get_login_token_sync()
|
||
File "D:\jsw_code\project\VWED_server\services\sync_service.py", line 1042, in get_login_token_sync
|
||
logger.error(f"调用登录接口失败: {str(e)}")
|
||
File "D:\jsw_code\project\VWED_server\utils\logger.py", line 235, in error
|
||
self.logger.error(message, *args, exc_info=exc_info, stack_info=stack_info, **kwargs)
|