A股DuckDB数据库的完整Schema参考。当需要查询数据库、编写SQL、了解表结构和字段含义时使用此技能。包含9张表的字段定义、数据单位、主键索引、数据覆盖范围和已知限制。
data/a-share.dbmcp_duckdb_query、mcp_duckdb_list_tables、mcp_duckdb_describe 工具duckdb data/a-share.dbduckdb.connect('data/a-share.db')| 表名 | 行数 | 说明 | 主键 |
|---|---|---|---|
stocks | 5,480 | 全A股股票基本信息 | code |
shareholders | 410,013 | 股东人数历史数据 |
(code, stat_date) |
bonds | 1,008 | 可转债全生命周期+行情+分析数据 | bond_code |
daily_market | ~5,488 | 每日行情快照(最新一天) | (code, trade_date) |
fundamentals | 57,343 | 财务报表数据(全A股年报2020-2024) | (code, report_date) |
klines | 1,240,581+ | 历史K线(全市场,每日追加) | (code, trade_date) |
revise_history | 494 | 可转债转股价下修历史(集思录) | (bond_code, meeting_date) |
data_updates | N | 数据更新元记录 | 无 |
fundamental_update_log | N | 基本面更新追踪 | code |
全A股(含北交所)股票代码和名称映射。
CREATE TABLE stocks (
code VARCHAR NOT NULL PRIMARY KEY, -- 6位股票代码,如 '000001', '600519', '920027'
name VARCHAR, -- 股票名称,如 '平安银行', '*ST国华'
market VARCHAR, -- 交易所: 'SZ'(深交所2891只), 'SH'(上交所2290只), 'OTHER'(北交所299只)
listing_date DATE, -- 上市日期
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
market 字段说明:
SZ = 深圳证券交易所(000xxx/001xxx/002xxx/003xxx/300xxx)SH = 上海证券交易所(600xxx/601xxx/603xxx/605xxx/688xxx)OTHER = 北京证券交易所(920xxx)东方财富来源的股东人数时序数据,用于庄控盘分析。约75条/股。
CREATE TABLE shareholders (
code VARCHAR NOT NULL, -- 股票代码
name VARCHAR, -- 股票名称
shareholders INTEGER, -- 本期股东户数
shareholders_prev INTEGER, -- 上期股东户数
change INTEGER, -- 增减户数(本期-上期)
change_ratio DECIMAL(10,4), -- 增减比例,百分比值(如 -16.67 表示减少16.67%)
price DECIMAL(10,2), -- 统计时最新价(元)
change_pct DECIMAL(10,2), -- 统计时涨跌幅(%)
stat_date DATE NOT NULL, -- 统计截止日(如季报日 2025-09-30)
announce_date DATE, -- 公告日期
avg_value DECIMAL(18,2), -- 户均持股市值(元)
avg_shares DECIMAL(18,2), -- 户均持股数量(股)
market_cap DECIMAL(18,2), -- 总市值(元)⚠️ 需 /1e8 转亿元
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
range_change_pct DECIMAL(10,4), -- 区间涨跌幅(%)
total_shares BIGINT, -- 总股本(股)
shares_change BIGINT, -- 股本变动(股)
shares_change_reason VARCHAR, -- 股本变动原因
PRIMARY KEY (code, stat_date)
);
-- 索引
CREATE INDEX idx_shareholders_announce ON shareholders(announce_date);
CREATE INDEX idx_shareholders_change ON shareholders(change_ratio);
数据范围: 5,443只股票,2013-01-14 至 2026-03-10
常用查询:
-- 查询单股股东人数历史(最近10期)
SELECT stat_date, shareholders, change, change_ratio
FROM shareholders WHERE code = '300401'
ORDER BY stat_date DESC LIMIT 10;
-- 筛选最近一期股东减少超10%的股票
SELECT s.code, s.name, s.shareholders, s.change_ratio, s.market_cap / 1e8 AS market_cap_yi
FROM shareholders s
INNER JOIN (
SELECT code, MAX(stat_date) AS latest FROM shareholders GROUP BY code
) t ON s.code = t.code AND s.stat_date = t.latest
WHERE s.change_ratio < -10
ORDER BY s.change_ratio;
-- 筛选连续N期股东减少的股票
-- 建议使用 baostock-guide skill 的批量筛选脚本
全A股可转债(含已退市),包含发行信息、转股价和三大触发条件。
CREATE TABLE bonds (
bond_code VARCHAR NOT NULL PRIMARY KEY, -- 转债代码,如 '113700', '127112'
bond_name VARCHAR, -- 转债名称,如 '海天转债'
stock_code VARCHAR, -- 正股代码(6位)
stock_name VARCHAR, -- 正股名称
issue_date DATE, -- 发行日期
maturity_date DATE, -- 到期日期
issue_size DECIMAL(12,4), -- 发行规模(亿元)⚠️ 已经是亿元单位
remaining_size DECIMAL(12,4), -- 剩余规模(亿元)⚠️ 全部为NULL,未填充
maturity_years SMALLINT, -- 存续期(年)
convert_start DATE, -- 转股起始日
convert_price DECIMAL(10,3), -- 最新转股价(元)⚠️ 已含下修/送股/分红等所有调整(来自东财f235实时推送)
original_price DECIMAL(10,3), -- 初始转股价(元)= 发行时原始价格(不变)
-- 强赎条件(正股连续N天达到转股价的X%触发)
redeem_pct DECIMAL(6,2), -- 强赎触发百分比,如 130.00 表示130%
redeem_days SMALLINT, -- 连续天数,如 15
redeem_window SMALLINT, -- 观察窗口天数,如 30
-- 回售条件
putback_start DATE, -- 回售起始日
putback_pct DECIMAL(6,2), -- 回售触发百分比,如 70.00 表示70%
putback_days SMALLINT, -- 连续天数,如 30
putback_window SMALLINT, -- 观察窗口天数,如 30
-- 下修条件
revise_pct DECIMAL(6,2), -- 下修触发百分比,如 85.00 表示85%
revise_days SMALLINT, -- 连续天数,如 15
revise_window SMALLINT, -- 观察窗口天数,如 30
-- 行情数据(每日更新 via daily_update.py Step 2)
bond_price DECIMAL(10,3), -- 转债价格(361/371有值)
convert_value DECIMAL(10,3), -- 转股价值
premium_rate DECIMAL(10,4), -- 溢价率
ytm DECIMAL(10,4), -- 到期收益率(343/361有值,含票息精确计算)
-- 到期赎回价和票面利率(每日更新 via daily_update.py Step 2)
maturity_redemption_price DECIMAL(10,3), -- 到期赎回价(面值百分比,如 115.000 = 面值的115%)
coupon_rate_1 DECIMAL(6,3), -- 第1年票面利率(%),如 0.300
coupon_rate_2 DECIMAL(6,3), -- 第2年票面利率
coupon_rate_3 DECIMAL(6,3), -- 第3年票面利率
coupon_rate_4 DECIMAL(6,3), -- 第4年票面利率
coupon_rate_5 DECIMAL(6,3), -- 第5年票面利率
coupon_rate_6 DECIMAL(6,3), -- 第6年票面利率
coupon_rate_7 DECIMAL(6,3), -- 第7年(如有)
coupon_rate_8 DECIMAL(6,3), -- 第8年(如有)
coupon_rate_9 DECIMAL(6,3), -- 第9年(如有)
coupon_rate_10 DECIMAL(6,3), -- 第10年(如有,绝大多数为NULL)
-- 分析指标(每日更新 via daily_update.py Step 3)
is_profitable BOOLEAN, -- 正股是否盈利(最新年报)
consecutive_profit_years INTEGER, -- 连续盈利年数(0-5)
latest_roe DECIMAL(10,4), -- 最新ROE(%)
latest_net_profit DECIMAL(18,2), -- 最新净利润(元)
revise_trigger_count INTEGER, -- 下修触发天数(近30日窗口内)
putback_trigger_count INTEGER, -- 回售触发天数
redeem_trigger_count INTEGER, -- 强赎触发天数
stock_price_latest DECIMAL(10,4), -- 正股最新价
-- 其他
rating VARCHAR, -- 信用评级,如 'AA', 'AA+', 'A+'
listing_date DATE, -- 上市日期
delist_date DATE, -- 退市日期(NULL表示仍在交易)
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
数据分布:
常用查询:
-- 查询当前在交易的转债
SELECT bond_code, bond_name, stock_code, stock_name, issue_size, convert_price, rating, listing_date
FROM bonds
WHERE listing_date IS NOT NULL AND listing_date <= CURRENT_DATE
AND (delist_date IS NULL OR delist_date > CURRENT_DATE)
ORDER BY listing_date DESC;
-- 最近N个月上市的转债
SELECT * FROM bonds
WHERE listing_date >= CURRENT_DATE - INTERVAL '3 months'
ORDER BY listing_date DESC;
-- 查询转债与正股关联
SELECT b.bond_code, b.bond_name, b.stock_code, s.name AS stock_name, b.convert_price
FROM bonds b
JOIN stocks s ON b.stock_code = s.code
WHERE b.delist_date IS NULL;
全A股最新一日行情数据(非历史序列,仅存储最近一天的快照)。
CREATE TABLE daily_market (
code VARCHAR NOT NULL, -- 股票代码
name VARCHAR, -- 股票名称
trade_date DATE NOT NULL, -- 交易日期(目前仅 2026-03-16 一天)
open DECIMAL(10,2), -- 开盘价(元)
high DECIMAL(10,2), -- 最高价(元)
low DECIMAL(10,2), -- 最低价(元)
close DECIMAL(10,2), -- 收盘价(元)
prev_close DECIMAL(10,2), -- 昨收价(元)
change_amount DECIMAL(10,2), -- 涨跌额(元)
change_pct DECIMAL(10,4), -- 涨跌幅(%)
amplitude DECIMAL(10,4), -- 振幅(%)
volume BIGINT, -- 成交量(股)
amount DECIMAL(18,2), -- 成交额(元)
turnover_rate DECIMAL(10,4), -- 换手率(%)
pe_dynamic DECIMAL(12,2), -- 动态市盈率(可能为NULL)
pe_ttm DECIMAL(12,2), -- 滚动市盈率(可能为NULL)
pb DECIMAL(10,4), -- 市净率
total_mv DECIMAL(18,2), -- 总市值(元)⚠️ 需 /1e8 转亿元
circ_mv DECIMAL(18,2), -- 流通市值(元)⚠️ 需 /1e8 转亿元
PRIMARY KEY (code, trade_date)
);
CREATE INDEX idx_daily_market_date ON daily_market(trade_date);
注意: 此表只有最新一天的数据(5,488只股票 × 1天)。历史K线数据请使用 klines 表。
常用查询:
-- 按市值排序的大盘股
SELECT code, name, close, total_mv / 1e8 AS total_mv_yi, pe_ttm, pb
FROM daily_market ORDER BY total_mv DESC LIMIT 20;
-- 涨幅前10
SELECT code, name, close, change_pct FROM daily_market
ORDER BY change_pct DESC LIMIT 10;
-- 低PE高市值筛选
SELECT code, name, close, pe_ttm, total_mv / 1e8 AS mv_yi
FROM daily_market
WHERE pe_ttm > 0 AND pe_ttm < 15 AND total_mv > 10e9
ORDER BY pe_ttm;
部分股票的财务数据(目前仅34只股票,用于特定筛选场景)。
CREATE TABLE fundamentals (
code VARCHAR NOT NULL, -- 股票代码
name VARCHAR, -- 股票名称
report_date DATE NOT NULL, -- 报告期(如 2025-09-30)
report_type VARCHAR, -- 报告类型: '一季报', '半年报', '三季报', '年报'
eps DECIMAL(10,4), -- 每股收益(元)
bps DECIMAL(10,4), -- 每股净资产(元)(大部分为NULL)
roe DECIMAL(10,4), -- 净资产收益率(%),如 1.45 表示 1.45%
net_profit DECIMAL(18,2), -- 净利润(元)⚠️ 需 /1e8 转亿元
revenue DECIMAL(18,2), -- 营业收入(元)⚠️ 需 /1e8 转亿元
profit_yoy DECIMAL(10,4), -- 净利润同比增长率(%)
revenue_yoy DECIMAL(10,4), -- 营业收入同比增长率(%)
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (code, report_date)
);
数据范围: 全A股年报数据 2020-2024(57,343条),覆盖绝大部分转债正股
更新方式: db/import_fundamentals.py 全量拉取东方财富年报数据。季报数据仅部分股票有。
日K线数据,来自腾讯财经API。
CREATE TABLE klines (
code VARCHAR NOT NULL, -- 股票代码
trade_date DATE NOT NULL, -- 交易日期
open DECIMAL(10,2), -- 开盘价(元,前复权)
high DECIMAL(10,2), -- 最高价(元,前复权)
low DECIMAL(10,2), -- 最低价(元,前复权)
close DECIMAL(10,2), -- 收盘价(元,前复权)
volume BIGINT, -- 成交量(股)
amount DECIMAL(18,2), -- 成交额(元)
PRIMARY KEY (code, trade_date)
);
数据范围: 全市场5500只股票,2022-11-23 至今(每日追加),1,240,581+行
更新方式: python db/daily_update.py 每日自动从 daily_market 追加当日 OHLCV 到 klines(ON CONFLICT DO NOTHING)。
历史数据源: 腾讯财经API(前复权,已弃用批量拉取)