第一次使用STEEMSQL查询谷哥点名数据steemCreated with Sketch.

in steem •  7 years ago  (edited)

首先感谢 @arcange 提供 SteemSQL服务,SteemSQL是一个包含STEEM区块链数据的公共MS-SQL数据库。

First thanks @arcange for providing SteemSQL services, SteemSQL is a public MS-SQL database with all the blockchain data in it.

其实SteemSQL上线之初我马上试用过,但是因为当时第一版只包含一些区块链的transaction数据,用起来还有诸多不便,所以后来SteemData一上线,我就转移战场了,尽管我从来未接触过MongoDB。之后,SteemData一直能满足我的需求,所以就懒得转战回来,但是我依然默默关注这个项目,看着它经过十多次升级变得越来越好,也看着很多STEEMIT的朋友开始使用这个数据库。

今天 @jubi 和我说使用SteemSQL 查询中文标题遇到一些困难,用WHERE title like '%第一次%'作为查询条件,查询不到相关数据,但是用英文则可以查询,我答应帮他看看。话说最近他在中文区举办两期谷哥点名活动,人气火爆,而第一次就是第二期活动的主题。估计太火爆,参与人数众多,单纯地靠人工看帖和整理有些辛苦,于是他想着用程序把整理帖子自动化吧。大家都在成长,这非常好。说到SteemSQL最近,中文区的很多朋友都在用,比如 @ace108, 以及 @joythewanderer, 他们还出过一些向导贴,大家感兴趣可以去翻一翻。

又扯远了,言归正传

安装pymssql
我懒得去下桌面软件,还是直接用Python吧
Python下可以使用pyodbc 以及 pymssql啥的,我选择的是pymssql

直接在命令行下直接安装指令
pip3 install pymssql

嘎,报一大堆错误, 其它啥的都不认识,我关注的大概三句

Running setup.py bdist_wheel for pymssql ... error
setup.py: Not using bundled FreeTDS
_mssql.c:266:22: fatal error: sqlfront.h: No such file or directory

去官网查了一下
http://pymssql.org/en/stable/building_and_developing.html
有这样一句

FreeTDS >= 0.91 including development files. Please research your OS usual software distribution channels, e.g, freetds-dev or freetds-devel packages.

缺啥补啥
sudo apt-get install freetds-dev
pip3 install pymssql

成功!

执行
SteemSQL 官网地址: http://steemsql.com/
但是很遗憾上边的链接信息不全,没有Database的信息
或许连上之后,就直接可以查出来,不过我在SteemSQL发布的帖子中找到了连接信息

Server: sql.steemsql.com
User: steemit
Password: steemit
Database name: DBSteem

import pymssql
conn = pymssql.connect(host ="sql.steemsql.com",database ="DBSteem",user="steemit",password="steemit")
在Python里用这个直接连上了,很好。

试着查了一下
cur = conn.cursor()
cur.execute("SELECT title FROM Comments WHERE author= 'oflyhigh' and title like '%区块链%'")

因为我昨天刚写了一篇文章,
使用PHP查询STEEM区块链 / Using PHP to query the STEEM blockchain

为啥就查不到呢?

然后换个关键词
cur.execute("SELECT title FROM Comments WHERE author= 'oflyhigh' and title like '%PHP%'")

('How to install Apache、MYSQL、PHP5 and run a Wordpress website on BananaPi',), ('拖了很久的事情终于完成了,将PHP 5.4 升级到 PHP 5.6',), ('使用PHP查询STEEM区块链 / Using PHP to query the STEEM blockchain',)

查出来的文章包含我的最新文章

排查
那么是哪里有问题导致的呢?
我第一个直觉是编码问题

然后,我把链接改成
conn = pymssql.connect(host ="sql.steemsql.com",database ="DBSteem",user="steemit",password="steemit", charset="utf8")
结果依旧

又去把FreeTDS的配置文件中加上字符集设置
sudo find / -name freetds.conf
sudo vi /etc/freetds/freetds.conf
sudo vi /usr/share/freetds/freetds.conf
通通加上:
client charset = UTF-8
结果依旧

尽管我觉得没必要,但是,又在Python文件中加上
#-- coding: utf-8 --
结果依旧

从查出的结果能正常显示来看,数据应该是按UTF-8存储的,那问题出在哪里呢?三把板斧用完了,我的找新招数了。

研究半天,发现个新玩意,就是在查询内容前加个N
详情见
https://docs.microsoft.com/en-us/sql/t-sql/data-types/nchar-and-nvarchar-transact-sql

Prefix Unicode character string constants with the letter N. Without the N prefix, the string is converted to the default code page of the database. This default code page may not recognize certain characters.

把我的查询改成:
cur.execute("SELECT title FROM Comments WHERE author= 'oflyhigh' and title like N'%区块链%'")

查询结果如下:

我也曾经文青过,18年前写的小诗 《花儿》,学laoyao,咱也放到区块链上
使用PHP查询STEEM区块链 / Using PHP to query the STEEM blockchain
珍惜羽毛 / STEEM区块链忠实的记录你的操作 / 获得共同操作账户的真实操作者
YY 一个基于STEEM区块链的聊天工具
STEEM区块链忠实的记录你的言行&操作

终于可行了

再查谷歌点名贴
现在在回头查参加谷歌点名的第二次活动的帖子,主题为第一次

cur.execute("SELECT title,created FROM Comments WHERE title like N'%第一次%' and created > '2017/08/01' order by created")
rows = cur.fetchall()
for row in rows: print("{}\t{}".format(row[0], row[1]))

结果如下:

Magic Clay 你第一次用黏土做了什么呢? 2017-08-01 14:13:45
第一次花費從steemit賺到的收益 ! The first time I get the 'real' money from steemit! 2017-08-02 06:11:21
第一次与你们的对话,my first conversation with y'all . 2017-08-03 18:32:51
第一次在steemit cn发文 感谢steemit让我能接触Bitcoin 2017-08-04 17:09:18
第一次人体解剖课上的惊悚事件 2017-08-07 11:30:48
第一次 - 離鄉別井 | “谷哥点名”活动 2017-08-09 07:10:30
相约大美新疆,第一次在第13届全国冬运会现场 Meet the beauty of Xinjiang,first time in China national winter games 2017-08-09 08:31:15
My first encounter with steemit/我与steemit的第一次邂逅 | 谷歌点名 2017-08-09 10:15:33
我人生的N种第一次 2017-08-09 10:31:48
第一次认识这个世界 2017-08-09 10:52:12
第一次 - 英國行山篇 "谷歌点名"活動 Hiking South Downs Way England 2017-08-09 11:00:00
【参加谷哥点名】我在Steemit的第一次发帖 2017-08-09 13:07:39
第一次离开熟悉的地方外出闯荡 2017-08-09 14:12:33
成就人生的第一次 2017-08-09 14:26:54
第一次 // First Time 2017-08-09 17:11:42
人生第一次——不仅有酸甜苦辣,更有悲欢离合 2017-08-09 18:12:18
第一次 - The First Time (Chinese content only but feel free to comment in English if you understsand) - (by @ace108) 2017-08-10 00:34:03
第一次, 细看妈妈的皱纹| “谷哥点名”活动 2017-08-10 01:11:24
爱上第一次--First Exploration 2017-08-10 01:22:15
如何看待你人生中的第一次? 2017-08-10 01:24:48
?? 老道茶館 ??-請上坐,喝杯茶,說點事;今日話題-第一次 (跨域合作:茶館X谷哥点名) ?? LAODR Tea House ?? 170810 2017-08-10 02:06:03
#隨筆2 第一次 | 谷哥点名 2017-08-10 03:55:33
第一次在星级大酒店吃饭 2017-08-10 04:09:12
第一次绝恋--最后的初恋 The first but also last love. 2017-08-10 04:37:30
第一次品味人生百态 My First Time - Ups and Downs in Life 2017-08-10 05:10:51
第一次 ── 我和我的友生 2017-08-10 05:14:57
第一次拿到在steemit上写作的钱 2017-08-10 05:44:24
领导,今天是我第一次喝酒,可不可以。。。 2017-08-10 06:52:42
第一次去博物馆之中国古代的酒具 The ancient wine cups of the Chinese history 2017-08-10 11:40:54
第一次去油菜花地里玩,种下了心灵里的树 2017-08-10 13:56:00
My first and long leave from my hometown // 第一次離鄉別井 2017-08-10 18:45:03
The first time i made my rose steamed buns 第一次做玫瑰花馒头! 2017-08-10 21:50:18
第一次 — 住在大学宿舍经历 / 谷哥点名活动 | My university life, my first time living in a university hostel 2017-08-10 23:03:06
第一次 - 在第一次家族旅行 - 台中 (內有家族旅行的心得)| The first time - My first family trip - Tai Chung 2017-08-11 01:16:42
很多第一次的第一次 | "谷哥点名" 2017-08-11 01:30:00
第一次“体验”做父母的感觉 / The First Time for Being a "Parent" | 谷歌点名 2017-08-11 04:10:27
第一次来华文区时的情景与华文区如何发展 2017-08-11 06:23:21
第一次注册域名 2017-08-11 08:18:54
第一次,科學研究的第一次/ “谷哥点名”活动 The First time: The Tirst Time for Scientific Research 2017-08-11 09:15:57
第一次去海边 —— “温良恭俭让”的北威尔士海滨小镇兰迪德诺 2017-08-11 09:28:42
第二期“谷哥点名”活動: 第一次 離鄉別井 2017-08-11 09:36:03
我的第一次的虛擬人生 2017-08-11 10:22:18
一天之内的两个第一次 2017-08-11 10:37:51

总算没辜负 @jubi 小友的信任

补充
@jubi 用另外一种方法
WHERE contains(title, '第一次')
可以查出部分数据
我搜索了一下,contains是基于全文索引进行查询
但结果可能受系统分词方法的影响导致不全

当然,也可能是我不会使用的缘故 😭

也加俩第一次关键字参赛,重在参与
另外,万一中奖呢,哈哈哈

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

Hi! I am a robot. I just upvoted you! I found similar content that readers might be interested in:
https://steemit.com/cn/@oflyhigh/steemsql

也可能是我不会使用的缘故

Congratulations @cryptobits3! You have completed some achievement on Steemit and have been rewarded with new badge(s) :

You made your First Comment

Click on any badge to view your own Board of Honor on SteemitBoard.
For more information about SteemitBoard, click here

If you no longer want to receive notifications, reply to this comment with the word STOP

By upvoting this notification, you can help all Steemit users. Learn how here!