ClickHouse数据库之Python篇
使用Python连接ClickHouse,有很多种方式,比如:infi.clickhouse_orm、clickhouse-driver、clickhouse-client、aiochclient等,在使用的时候,多多少都会有各种各样的问题。
1.Client Libraries from Third-party Developers (官方已经不维护的第三方列表)
2.clickhouse的python库:clickhouse-driver使用 (使用clickhouse-driver连接clickhouse,看起来还是比较简单的)
3.利用python连接clickhouse数据库 (这篇文章是后来看到了,主要是使用了clickhouse-driver这个连接库)
1.aiochclient安装
1 | ## 升级pip3 |
问题
(1) Microsoft Visual C++ 14.0 is required.
安装ciso8601的时候,出现了这个问题。
解决方法就是:Use the link to Visual C++ 2015 Build Tools. That will install Visual C++ 14.0 without installing Visual Studio.也就是安装 Visual C++ 2015 Build Tools,这样就可以安装Visual C++ 14.0,但是不用安装Visual Studio。
1.Python 3 Microsoft Visual C++ 14.0 is required
2.Please help.. Installation error installing HA on Windows10 + Python 3.7.7
3.初入python大坑之pip install(包安装)问题
4.Microsoft Visual C++ 14.0 is required (Unable to find vcvarsall.bat) (这篇文章说明了如何安装MS 14.0)
(2) fatal error C1083: Cannot open include file: ‘Python.h’: No such file or directory
MS Visual C++14.0安装完成之后,再次执行安装ciso8601,还是报错了,这次没有显示 Microsoft Visual C++ 14.0 is required.而是显示了找不到Python.h文件。
2.示例
如下代码,是可以正常运行的,可以在数据库种插入相应的值。
1 | import asyncio |
问题
1.当上面的sql语句变成了下面的sql语句,再次执行,就会出现错误:Missing columns: ‘DDSFASDFAS’ while processing query: ‘DDSFASDFAS’。需要改为正确的语句,注意单引号和双引号的位置。
1 | ## 错误的sql语句 |
这是正确执行的结果:
2.第二个问题,就是sql语句中,不能包含中括号,即使数据库创建的时候,字段设置为字符串类型,比如上面的calcTable字段。
1 | ## 错误的sql语句 |
这个就比较头疼了,加入我想插入一个json字符串怎么办呢?我这个calcTable字段必须包含中括号啊。但是只要你在sql语句中出现了中扩号,就会被识别为一个字段,然后报没有相应的列的问题。
根据我查看错误的最后一行,使用Ctrl+鼠标左键,可以通过VS Code进入到相应的源码中,问题主要出在 query = query.format(**query_params) 上,于是我查了相关的资料,找到了一个在字符串中加入f参数的方法
1 | sql=f"INSERT INTO phalgorithm.pipeHeatAnalyse(id,calcTable) values (4,'{'DDSFASDFAS':'dsf'}')" |
经过测试这种方法还是不行的。但是找打了问题的根本原因,就是client调用了format方法,但是format方法会根据参数进行填充,所以就不能有中括号,比如下面的语句,就会把GeeksforGeeks填充到第一个中括号中。
1 | print ("{}, A computer science portal for geeks." |
知道了问题的所在,那就好办了,只要找到输出原生中括号的方法就行了。经过测试,最后是通过两个中括号来代替一个中括号的方法进行转义。
1 | ## 正确的sql语句 |
1.Python SQL query string formatting
2.[python]str.format输出花括号本身 (这个方法不行)
3.Python | format() function (这个时python中format方法的使用)
3.Python asyncio报错 RuntimeError: asyncio.run() cannot be called from a running event loop
解决方法:
1 | pip install tornado |