3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 JoinQuant 聚宽平台中,query 函数底层使用的是 SQLAlchemy。要在 filter 中实现“包含”或者模糊查询,你可以使用 SQLAlchemy 提供的 .like() 方法,并结合 SQL 的通配符 %。
针对你的需求,只需要将原来的精确匹配 == 改为 .like('%' + shareholder_name + '%') 即可。
def get_institution_hold_sec(shareholder_name, date):
from jqdata import finance
from jqdata import query
# 使用 .like() 方法,并在字符串前后加上 '%' 通配符
q = query(finance.STK_SHAREHOLDER_FLOATING_TOP10).filter(
finance.STK_SHAREHOLDER_FLOATING_TOP10.shareholder_name.like('%' + shareholder_name + '%'),
finance.STK_SHAREHOLDER_FLOATING_TOP10.pub_date >= date
).limit(2000)
all_data2 = finance.run_query(q)
# 提取需要的列
data = all_data2[['company_name','code','end_date','pub_date','shareholder_name','shareholder_rank','shareholder_class','share_number','share_ratio','sharesnature']]
# 重命名列名
data.columns = ['股票名称','股票代码','截止日期','公告日期','股东名称','股东名次','股东性质','持股数量','占总股本比例%','股份性质']
return data
# 测试模糊查询
shareholder_name = '中央汇金'
date = '2018-09-30'
result_df = get_institution_hold_sec(shareholder_name, date)
print(result_df)
.like() 方法:这是 SQLAlchemy 中用于执行 SQL LIKE 操作的函数。它允许你进行模式匹配。% 通配符:在 SQL 中,% 代表零个、一个或多个任意字符。
like('%中央汇金%'):表示只要字符串中间包含“中央汇金”四个字,无论前后有什么字符,都会被匹配到(例如“中央汇金投资有限责任公司”)。like('中央汇金%'):表示匹配以“中央汇金”开头的字符串。like('%中央汇金'):表示匹配以“中央汇金”结尾的字符串。通过这种方式,你就可以非常灵活地在聚宽的财务和宏观数据库中进行文本的模糊搜索了。