对于rs.last()报错问题

本文探讨了在使用微软SQL进行数据查询时,如何正确运用rs.last()和rs.beforeFirst()方法。通过设置PreparedStatement的类型为ResultSet.TYPE_SCROLL_INSENSITIVE,解决了方法调用失败的问题,确保了查询操作的顺利进行。

在写到利用数据库查询数据的时候,会用到的语句rs.last()rs.beforeFirst(),这俩个方法会报错,原因是微软的SQL没有这个方法,需要额外添加语句。


        String sql="select * from stu_info";  //查询关键代码
        PreparedStatement pstmt=dbConn.prepareStatement(sql,
        ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
        ResultSet rs=pstmt.executeQuery();

 

 添加红字的关键代码,就可以正常运行rs.last()。

不过,找的参考文章中的ResultSet.CONCUR_UPDATETABLE这个会报错,不知道为什么……

参考文章链接:https://blog.youkuaiyun.com/pzasdq/article/details/52602730

 

``` import baostock as bs import pandas as pd import numpy as np import datetime from scipy.signal import argrelextrema from concurrent.futures import ThreadPoolExecutor, as_completed def basic_screening(df): """执行基本面筛选""" df = df.copy() df['peTTM'] = pd.to_numeric(df['peTTM'], errors='coerce') df['total_mv'] = pd.to_numeric(df['total_mv'], errors='coerce') / 1e8 df['pbMRQ'] = pd.to_numeric(df['pbMRQ'], errors='coerce') conditions = ( (df['peTTM'].between(0, 30)) & (df['total_mv'] > 100) & (df['pbMRQ'] > 0) ) return df[conditions].reset_index(drop=True) def get_stock_data(): """获取股票数据并计算总市值""" rs = bs.query_all_stock(day=datetime.datetime.now().strftime("%Y-%m-%d")) codes = [row[0] for row in rs.data if not row[0].startswith(('sh.688', 'sz.30'))] # 获取基础信息 columns = ['code', 'code_name', 'peTTM', 'pbMRQ', 'outstanding'] data_list = [] for code in codes: rs_stock = bs.query_stock_basic(code=code) if rs_stock.data: data = rs_stock.data[0] # 获取实时行情计算总市值 rs_price = bs.query_stock_real(code) close_price = float(rs_price.data[0][6]) if rs_price.data else np.nan outstanding = float(data[4]) # 流通股本(万股) total_mv = outstanding * close_price / 10000 # 转换为亿元 data_list.append([ data[0], # code data[1], # code_name data[4], # peTTM data[5], # pbMRQ total_mv # 计算的总市值 ]) return pd.DataFrame(data_list, columns=['code', 'name', 'peTTM', 'pbMRQ', 'total_mv']) def detect_divergence_wrapper(args): """多线程包装函数""" code, end_date = args try: rs = bs.query_history_k_data_plus(code, "date,close", end_date=end_date, frequency="d", count=60) data = pd.DataFrame(rs.data, columns=['date', 'close']) # 此处应补充实际的背离检测逻辑 return (code, False) # 示例返回值 except Exception as e: print(f"Error processing {code}: {str(e)}") return (code, False) if __name__ == "__main__": bs.login() try: end_date = datetime.datetime.now().strftime("%Y-%m-%d") with ThreadPoolExecutor(max_workers=16) as executor: # 阶段1:获取并筛选基础数据 df_base = get_stock_data() df_filtered = basic_screening(df_base) # 阶段2:多线程检测背离 futures = [] code_args = [(code, end_date) for code in df_filtered['code']] for args in code_args: futures.append(executor.submit(detect_divergence_wrapper, args)) # 收集结果 divergence_results = {} for future in as_completed(futures): code, result = future.result() divergence_results[code] = result df_filtered['rsi_divergence'] = df_filtered['code'].map(divergence_results) # 输出结果 final_result = df_filtered[df_filtered['rsi_divergence']] print("筛选结果:") print(final_result[['code', 'name', 'peTTM', 'total_mv']]) finally: bs.logout()```报错AttributeError: module 'baostock' has no attribute 'query_stock_real'. Did you mean: 'query_stock_basic'?,请修正代码
03-15
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值