前言
最近研究了下python爬虫,想爬取一些数据存储到clickhouse里,举行分析。由于是新手,搜了好多教程,也踩了好几天的坑,记录一下,防止以后再走弯路。
连接代码
- #引入库
- from clickhouse_driver import Client
- # 建立连接,注意这里的参数赋值方式
- client = Client(host='xx.xx.xx.xx', port=8900, user='default', password='xxxxx@xxxxx', database='default')
- result = client.execute('show tables')
- print(type(result), result)
- for row in result:
- print(row)
-
- client.disconnect()
复制代码 经验总结
遇到的问题重要集中在建立连接语句上,client = Client(host=‘xx.xx.xx.xx’, port=8900, user=‘default’, password=‘xxxxx@xxxxx’, database=‘default’)
- 参数赋值方式。利用 host= 格式赋值
- 端口用错问题。clickhouse 数据库启动时会建立三个端口监听,http端口是给第三方工具连接利用的,tcp端口才是给python 代码连接利用的。要检察对应clickhouse设置的端口,参见其他文章 clickhouse安装及简朴利用
- 端口确认问题。在设置前,先利用telnet确认 端口服务已开启,若端口设置是对的,但还不能通,要思量下防护墙问题。
- 按照以上要求,都是可以连接乐成的。有的教程说还是连接不乐成,八成还是端口问题。
执行查询
- #引入库
- from clickhouse_driver import Client
- # 建立连接,注意这里的参数赋值方式
- client = Client(host='xx.xx.xx.xx', port=8900, user='default', password='xxxxx@xxxxx', database='default')
- result = client.execute("select * from lotto limit 2")
- for row in result:
- print(row)
-
- client.disconnect()
复制代码 若是查询语句带了Date32范例的字段,就会报错 KeyError: -25567,缘故原由是表里记录的创建时间字段的值都是‘1900-01-01’,clickhouse系统默认时间,python无法处理,改成其他时间即可办理问题。
执行插入
- #引入库
- from clickhouse_driver import Client
- # 建立连接,注意这里的参数赋值方式
- client = Client(host='xx.xx.xx.xx', port=8900, user='default', password='xxxxx@xxxxx', database='default')
- insert_sql = 'INSERT INTO `default`.lotto(id, `number`,award_date, award_result, f1, f2, f3, f4, f5, b1, b2)VALUES'
- data = [(uuid.uuid4().__str__(), '123', datetime.datetime.strptime('2024-01-17', '%Y-%m-%d').date(), '012325', '01', '1', '2', '3', '4', '5', '6', datetime.datetime.strptime('2024-01-17', '%Y-%m-%d').date())]
- result = client.execute(insert_sql, data)
- for row in result:
- print(row)
-
- client.disconnect()
复制代码 执行插入时,data的拼接是有规则限定的;
- data 要是一个列表范例(即使插入一行),内里是一行行要插入的记录,记录要利用元组范例封装
- 日期不能直接写 ‘2024-01-17’字符范例,不然会报错,必要转成datetime.date范例
- UUID生成的范例不是字符范例,必要转成对应的字符范例
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |