前两年使用过PyMSSQL处理过一些链上数据,但是后来因为数据库订阅成本太高了,就放弃了。最近看到HiveSQL改成由提案支付费用,但是对用户免费,于是用打算拿来用用看。
(图源 :pixabay)
基本用法
虽然我最终打算使用PHP连接HiveSQL,但是使用PyMSSQL来做一些调试还是很方便的。PyMSSQL可以使用如下指令安装:
pip3 install pymssql
然后使用类似如下代码,就可以进行一些简单的查询了:
将数据库主机名、用户、密码等换成对应的信息,就可以查询在HIVE链上,我写的,标题中包含香蕉派关键字的文章标题了。
从返回结果来看,我还没少水相关的内容:
查询数据表
其实连接数据库,最重要的内容就是其中的SQL语句怎么写,也就是上述代码中SELECT title ......
那部分,不过在这之前,我们要知道数据中有哪些表,表中都有哪些字段,这样才能方便我们进行查询。
而在几年前,我使用如下语句查询数据库中包含的表的情况:
SELECT Name FROM DatabaseName..SysObjects Where XType='U' ORDER BY Name
然而用这种方式,我链接HiveSQL却什么都没有查询到。去搜索一下才了解到,上述用法适合MSSQL的早些版本,而新版中,应该使用如下方式:
SELECT table_name FROM information_schema.tables;
这是其中部分返回内容,我们上述示例使用Comments表,就在其中:
查询数据表字段
查询字段以前我使用如下语句:
SELECT Name FROM DatabaseName..SysColumns WHERE id=Object_Id('TableName')
让我来试试:
还好这个语句还能用,没因为版本变化而变化。Comments
表返回如下字段:
不过貌似针对新版,下列语句更明了一些:
SELECT column_name FROM information_schema.columns WHERE table_name = '表名'
试了一下,工作良好!以后就用这个啦!
查询字段详细信息
查询字段详细信息我以前使用如下方式,试了一下还是可以工作的:
SELECT SysColumns.Name, SysTypes.Name, SysColumns.IsNullable, SysColumns.Length FROM SysColumns, SysTypes WHERE SysColumns.XUserType = SysTypes.XUserType AND SysColumns.Id = object_id('Comments')
不过汲取上个操作的经验,使用INFORMATION_SCHEMA来查询应该更清晰明了一些,所以改写一下,应该是这个样子:
SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, CHARACTER_OCTET_LENGTH FROM information_schema.columns WHERE table_name = '表名';
关于长度的返回上,后者对固定长度类型都返回None,作为对比,放两图:
不过这并不影响我这种初级使用者,就不深入研究了。
没想到一两年不用,变化还挺大的,看大神在群里发表情图,今天不学习,明天变垃圾:
也许没那么快变垃圾,但是再不学习的话,真的更不上时代发展变迁了。😭