-
Notifications
You must be signed in to change notification settings - Fork 28
Description
Traceback (most recent call last):
File "/home/username/mysql_ch_replicator/mysql_ch_replicator/main.py", line 6, in
main()
File "/home/username/mysql_ch_replicator/mysql_ch_replicator/mysql_ch_replicator/main.py", line 152, in main
run_db_replicator(args, config)
File "/home/username/mysql_ch_replicator/mysql_ch_replicator/mysql_ch_replicator/main.py", line 98, in run_db_replicator
db_replicator.run()
File "/home/username/mysql_ch_replicator/mysql_ch_replicator/mysql_ch_replicator/db_replicator.py", line 178, in run
self.run_realtime_replication()
File "/home/username/mysql_ch_replicator/mysql_ch_replicator/mysql_ch_replicator/db_replicator.py", line 379, in run_realtime_replication
self.handle_event(event)
File "/home/username/mysql_ch_replicator/mysql_ch_replicator/mysql_ch_replicator/db_replicator.py", line 407, in handle_event
self.upload_records_if_required(table_name=event.table_name)
File "/home/username/mysql_ch_replicator/mysql_ch_replicator/mysql_ch_replicator/db_replicator.py", line 547, in upload_records_if_required
self.upload_records()
File "/home/username/mysql_ch_replicator/mysql_ch_replicator/mysql_ch_replicator/db_replicator.py", line 571, in upload_records
self.clickhouse_api.erase(
File "/home/username/mysql_ch_replicator/mysql_ch_replicator/mysql_ch_replicator/clickhouse_api.py", line 184, in erase
self.execute_command(query)
File "/home/username/mysql_ch_replicator/mysql_ch_replicator/mysql_ch_replicator/clickhouse_api.py", line 67, in execute_command
self.client.command(query)
File "/home/username/mysql_ch_replicator/mysql_ch_replicator/.venv/lib/python3.11/site-packages/clickhouse_connect/driver/httpclient.py", line 351, in command
response = self._raw_request(payload, params, headers, method, fields=fields, server_wait=False)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/username/mysql_ch_replicator/mysql_ch_replicator/.venv/lib/python3.11/site-packages/clickhouse_connect/driver/httpclient.py", line 462, in _raw_request
self._error_handler(response)
File "/home/username/mysql_ch_replicator/mysql_ch_replicator/.venv/lib/python3.11/site-packages/clickhouse_connect/driver/httpclient.py", line 385, in _error_handler
raise OperationalError(err_str) if retried else DatabaseError(err_str) from None
clickhouse_connect.driver.exceptions.DatabaseError: HTTPDriver for http://localhost:8123 received ClickHouse error code 124
Code: 124. DB::Exception: Incorrect size of tuple in set: 8 instead of 2: While processing _CAST(if((departments, termine) IN (73024, 580, 73024, 579, 73024, 645, 73024, 646), _CAST(0, 'UInt8'), _row_exists), 'UInt8'). (INCORRECT_ELEMENT_OF_SET) (version 24.11.1.2557 (official build))
I fixed it by chanching this:
git diff mysql_ch_replicator/clickhouse_api.py
diff --git a/mysql_ch_replicator/clickhouse_api.py b/mysql_ch_replicator/clickhouse_api.py
index 6dd3e6c..253d26b 100644
--- a/mysql_ch_replicator/clickhouse_api.py
+++ b/mysql_ch_replicator/clickhouse_api.py
@@ -174,7 +174,8 @@ class ClickhouseApi:
def erase(self, table_name, field_name, field_values):
field_name = ','.join(field_name)
- field_values = ', '.join(list(map(str, field_values)))
+ field_values = ', '.join(f'({v})' for v in field_values)
query = DELETE_QUERY.format(**{
'db_name': self.database,
'table_name': table_name,This is the table in mariadb:
CREATE TABLE Termin_to_Department (
departments int(11) NOT NULL,
termine int(11) NOT NULL,
PRIMARY KEY (departments,termine),
KEY IDX_FC0880B716AEB8D4 (departments),
KEY IDX_FC0880B7168C0A8F (termine),
CONSTRAINT FK_FC0880B7168C0A8F FOREIGN KEY (departments) REFERENCES task_Department (id),
CONSTRAINT FK_FC0880B716AEB8D4 FOREIGN KEY (termine) REFERENCES Termin (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci