问题描述
option_data=query(opt.OPT_CONTRACT_INFO).filter(opt.OPT_CONTRACT_INFO.underlying_name.link('%白糖%'))
这样老是报错,我要用underlying_name中包含'白糖'的所有记录!
解决方案
您好!您在代码中遇到的报错是因为拼写错误。在 JoinQuant(聚宽)底层的 SQLAlchemy 查询语法中,用于模糊匹配的方法是 like,而不是 link。
正确的代码写法
您只需要将代码中的 .link 改为 .like 即可正确执行包含“白糖”的模糊查询:
# 正确的写法:使用 like 而不是 link
option_data = query(
opt.OPT_CONTRACT_INFO
).filter(
opt.OPT_CONTRACT_INFO.underlying_name.like('%白糖%')
)
# 然后使用对应的 run_query 方法获取数据(假设 opt 是您导入的期权库)
# df = opt.run_query(option_data)
关于 like 模糊匹配的用法说明
在 filter 条件中使用 .like() 时,它的用法与 SQL 中的 LIKE 关键字完全一致,主要通过 % 和 _ 作为通配符:
-
%(百分号):代表任意长度的任意字符(包括零个字符)。like('%白糖%'):表示字符串中只要包含“白糖”即可(例如:“白糖期权”、“优质白糖”、“白糖”都会被匹配)。like('白糖%'):表示以“白糖”开头。like('%白糖'):表示以“白糖”结尾。
-
_(下划线):代表单个任意字符。like('白糖_'):表示以“白糖”开头,且后面只能跟一个字符(例如:“白糖A”匹配,“白糖AB”不匹配)。
总结
在聚宽的 query 过滤条件中,进行字符串包含查询请务必使用 .like('%关键字%')。修改拼写后您的代码就可以正常获取所有标的名称中包含“白糖”的期权合约记录了!