canal-python icon indicating copy to clipboard operation
canal-python copied to clipboard

alibaba canal 客户端(Python3 版本)

Results 35 canal-python issues
Sort by recently updated
recently updated
newest added

完整日志: ``` connected to 127.0.0.1:11111 Traceback (most recent call last): File "canal_client.py", line 10, in client.check_valid(username=b'canal', password=b'canal') File "/usr/local/lib/python3.6/site-packages/canal/client.py", line 37, in check_valid data = self.connector.read_next_packet() File "/usr/local/lib/python3.6/site-packages/canal/connector.py", line 41,...

客户端中,不能同步处理好mysql源表的blog类型的字符串,会有乱码的发生。乱码只产生于 中文字符,英文字符没有问题。 canal版本为1.1.14 canal-python pip客户端为0.4版本 复原的步骤为: `create table test_blog ( id int not null primary key auto_increment, detail blob not null );` `insert into test_blog (detail) values("测试");` 此时同步这条数据就是乱码。

源代码:https://github.com/haozi3156666/canal-python/blob/68ecec0795ef712c0c00d001fccb39215cfbc3dc/canal/client.py#L116 ```py elif packet.type == CanalProtocol_pb2.PacketType.ACK: ack = CanalProtocol_pb2.PacketType.Ack() ack.MergeFromString(packet.body) if ack.error_code > 0: raise Exception('get data error. error code:%s, error message:%s' % (ack.error_code, ack.error_message)) ``` CanalProtocol_pb2.PacketType.Ack()是一个枚举?即使是枚举也不能这么写吧。此处ACK回包,应该是返回 CanalProtocol_pb2.Ack() ```py elif...

def check_valid(self, username=b'', password=b''):

``` In [48]: EntryProtocol_pb2.EventType.items() Out[48]: [('EVENTTYPECOMPATIBLEPROTO2', 0), ('INSERT', 1), ('UPDATE', 2), ('DELETE', 3), ('CREATE', 4), ('ALTER', 5), ('ERASE', 6), ('QUERY', 7), ('TRUNCATE', 8), ('RENAME', 9), ('CINDEX', 10), ('DINDEX', 11), ('GTID',...

你好,看你的例子里,消息回执都没有写,写的也是可选。 请问如果出现有消息没有同步到,没有消费那么下次怎么取到未消费的消息?

![image](https://user-images.githubusercontent.com/23468113/78967508-4176a880-7b35-11ea-8fa3-4b61a84df3b8.png)

修正插入和删除的format_data,增加获取的的data字典解释

第28行、第33行 row.beforeColumns、row.afterColumns中包含多个字段的修改 下面遍历语句中对format_data的操作是 format_data = {column.name: column.value} ,这样format_data仅仅会保留row.afterColumns中最后一个字段的信息 建议改成format_data.setdefault(column.name, column.value)