生物信息学数据库检索实战:选型、E-utilities与BLAST排错指南

发布时间:2026/10/11 21:32:46
生物信息学数据库检索实战:选型、E-utilities与BLAST排错指南 简介PPT课件《二生物信息学数据库及检索》共127页面向生物信息学入门学习者与科研人员系统梳理常用生物数据库的组成、分类与检索方法。资源为计算机标签下的教学材料适合课程讲授、自学备考或用于快速建立生物信息数据库整体认知。压缩包内仅含1个pptx文件大小15MB文件集中、便于直接浏览和讲解。课件内容涵盖数据库基本概念重点介绍GenBank、EMBL、DDBJ三大核苷酸数据库并补充蛋白质数据库、Taxonomy分类库、PubMed文献库以及MySQL、AceDB等数据库工具同时涉及序列提交规范、检索方式和GenBank记录结构等实用知识帮助读者理解从原始数据到注释检索的完整流程。已有88人学习浏览适合作为生物信息学课程配套讲义或数据库入门参考资料。1. 生物信息学数据库及检索到底在解决什么问题当手里握着一条没有注释标签的序列或者一张差异表达基因列表时第一步不是急着跑聚类、画火山图而是先做生物信息学数据库及检索把有限的线索丢进数据库问它“这是什么、和谁像、注释信息是什么”。这个过程看起来只是查网页、点下载实际上库选错、版本没对齐、检索式写太宽都会在后面分析里埋雷。这篇笔记专门讲生物信息学数据库的分类选型、检索套路和排错经验适合刚接触生信的分析人员、做测序交付的工程师以及从湿实验转到干实验的研究者——目标是让你把“查库”做成一件可复现、可批量、可排查的日常工作。2. 先分清数据库家底原始库、派生库、知识库怎么选2.1 生物信息学数据库的三条主链从数据格式倒推选库逻辑生物信息学数据库大体沿三条主链分布核酸序列、蛋白序列、三维结构。对应最常用的库是 GenBank/ENA/DDBJ 三大核酸主库、UniProtKB 蛋白库以及 PDB 结构库。一个快速判断方法是看你要下载的文件格式如果拿到的是 FASTA你在序列库如果拿到的是 PDB 格式或 mmCIF 格式的结构文件你在结构库如果拿到的是 GFF/GTF那是基因组注释库。格式本身就能反映数据类型这是我入门时最快的内化方式。三大核酸库之间每天交换新数据从任一家提交另外两家会同步收录。但要注意DDBJ 的总体 release 更新周期不是日更涉及“最新提交”的检索要留时间差。蛋白层面UniProtKB 分成 Swiss-Prot 和 TrEMBL 两部分Swiss-Prot 是人工审编覆盖窄但注释质量高TrEMBL 是自动注释覆盖广但常有冗余和过粗的功能描述。我一般做功能注释时优先限定 Swiss-Prot 的 reviewed 记录做全基因组层面的泛注释才放开到 TrEMBL。PDB 解决的是结构问题要找蛋白三维结构、做分子对接、分析结构域空间排布都得落回这一家。2.2 一张选型表把手里的问题映射到具体数据库下面是我常用的一张选型表按“手里有什么、要回答什么问题”来选库基本原则是“选注释目标最匹配的库”而不是“选最大的库”。很多新手一上来就去 nr 库跑 BLAST但 nr 是去冗余后的混合库注释风格不统一做功能注释不如 RefSeq 或 Swiss-Prot 稳定。数据库收录内容条目标识示例适合场景GenBank / ENA / DDBJ原始核酸序列与提交者注释AB123456、LC123456查原始提交记录、提交新序列RefSeq非冗余、经注释的核酸与蛋白NM_000546、NP_000537找标准转录本、做基因结构注释UniProtKB蛋白序列与功能注释P04637查蛋白功能、结构域、亚细胞定位PDB实验测定三维结构1TUP、6CRV结构分析、分子对接、结构比对KEGG通路、模块、直系同源组hsa05200、ko:通路富集、代谢网络分析dbSNP单核苷酸变异与人群频率rs1051791变异筛选、位点注释Pfam蛋白结构域家族PF00076保守结构域注释选库时的另一个判断维度是“原始库、派生库、知识库”。GenBank 属于原始库保留提交者的原始注释质量参差RefSeq 是对照基因组和转录组人工整理过的派生库条目标识稳定注释相对统一KEGG、GO、Pfam 这类属于知识库它们的“检索”通常按通路、条目、结构域家族来组织而不是按序列登录号。你要找“这个基因参与哪些通路”就去知识库要找“这个转录本最新最可靠的序列”去 RefSeq 或 UniProtKB 更合适。2.3 版本号、物种覆盖与更新时间是三个隐形的检索参数数据库检索不只是“关键词 点搜索”版本号才是最容易忽略的隐形参数。拿参考基因组来说GRCh38 和 GRCh37 是两个不同的坐标系同一个 rs 号或基因位置在两套坐标下会差出数十到上百个碱基。常见做法是在分析脚本头部用注释写清楚参考基因组版本和数据库 release 日期例如# GRCh38.p14, dbSNP build 156, 2025-04-01下载的 fasta 文件名里通常自带版本不要随意改名。检查版本还可以看.fai索引文件里的 contig 长度GRCh38 的 chr1 长度与 GRCh37 不同一眼能分辨。物种覆盖同样影响检索策略。人类相关的数据库资源最全模式生物次之到了古菌、原生动物、某些经济昆虫很多库收录极少甚至不收。此时检索式必须加物种限定并且要先确认该库对物种字段的写法是拉丁名还是英文俗名。更新节奏也要心里有数主库同步通常按天计知识库按 release 版本发布。引用 KEGG 或 Pfam 条目时要写版本号记录检索日期是让结果可复现的基本习惯。3. 把文本检索变成命令行操作Entrez 与 E-utilities 跑通最小流程3.1 检索的本质是“先定位再获取”NCBI 的 Entrez 体系把文献、序列、基因、变异放在同一套跨库检索框架里看起来一个搜索框通吃所有底层却是清晰的两步先定位到一批 ID再用 ID 去取数据。网页上的一次搜索本质是 esearch → esummary → efetch 三个接口的组合。理解这个组合就能用脚本替代手工翻页也能把检索词、日期、数据库版本都留档让检索结果可复现。我日常最常用的三个 E-utilities 接口是esearch根据检索词返回 ID 列表、esummary根据 ID 返回摘要信息用来确认条目是不是自己要的、efetch根据 ID 返回完整记录格式可选 fasta、gb、xml 等。流程上不要直接从检索词跳到 efetch先过一遍 esummary能过滤掉大量同名的非目标条目这一步在网页上不明显脚本里却非常值得多花一次请求。3.2 用 curl 完成一次“基因名到 FASTA”的最小命令先从最简命令开始。比如要查“人类 BRCA1 基因的 mRNA 序列”先用 esearch 定位 IDcurl -s https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?dbnucleotidetermhuman%20BRCA1%20AND%20mRNA%5BTitle%5Dretmax5返回的 XML 里会有一组Id标签这就是定位结果。注意 term 参数里的空格要编码成%20[Title]要编码成%5BTitle%5D否则 shell 会把方括号当作通配符处理。拿到其中一个 ID 后再调用 efetch 转换成 FASTAcurl -s https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?dbnucleotideidBRCA1_IDrettypefastaretmodetext这里db决定 ID 所在数据库rettypefasta决定返回序列格式retmodetext让接口返回纯文本而不是 XML 包装。如果要做批量就把这两条命令写进一个循环但要在两次请求之间加sleep避免触发 NCBI 的请求频率限制。没带 API key 时受限约 3 次每秒申请了 API key 可以放宽到 10 次每秒我一般把 key 放到环境变量里脚本统一读取不写死在代码中。3.3 用 Python 把“检索式 → ID → FASTA”串成一条链用 Python 的好处是能把 XML 解析、频率控制、结果落盘一次做完。下面是一个可以直接抄的模板输入基因名输出 FASTA 文件import requests import time from xml.etree import ElementTree as ET BASE https://eutils.ncbi.nlm.nih.gov/entrez/eutils API_KEY # 建议从环境变量读取不要硬编码 def esearch_gene(gene): term f{gene}[Gene Name] AND Homo sapiens[Organism] AND mRNA[Title] r requests.get(f{BASE}/esearch.fcgi, params{ db: nucleotide, term: term, retmax: 5, api_key: API_KEY }, timeout30) root ET.fromstring(r.text) return [e.text for e in root.iter(Id)] def fetch_fasta(ids, out_file): with open(out_file, w) as fh: for rid in ids: r requests.get(f{BASE}/efetch.fcgi, params{ db: nucleotide, id: rid, rettype: fasta, retmode: text, api_key: API_KEY }, timeout30) fh.write(r.text) time.sleep(0.2) # 有 API key 时 0.2 秒足够无 key 建议调到 0.4 if __name__ __main__: ids esearch_gene(BRCA1) fetch_fasta(ids, BRCA1.fasta) print(f抓到 {len(ids)} 条序列)逻辑说明先用esearch_gene把基因名转成 ID 列表再用fetch_fasta逐个取回 FASTA 并写入文件。两个函数分开写便于后面扩展成批量模式。time.sleep是频率控制的必修课没有它脚本跑到一半会被服务端限流返回一片错误信息而不是序列。如果只想要 RefSeq 的标准转录本可以在检索式里加AND refseq[Filter]把范围进一步收窄。这一步不是玄学而是把网页端的高级筛选放到检索词层面结果更干净也更容易解释。3.4 检索式怎么写才不是玄学字段限定与布尔逻辑写检索式的核心是“把每个词放到它该在的字段里去”。同样一个 BRCA1出现在基因名、标题、序列注释、全文里含义完全不同。常用做法是BRCA1[Gene Name] AND Homo sapiens[Organism]限定基因名和物种mRNA[Title]只查标题里带 mRNA 的条目避开一大把基因组片段AND/OR/NOT连接条件注意优先级复杂检索式加括号最常见的翻车是把 OR 当成 AND 用比如想找“BRCA1 或 BRCA2 的 mRNA”写成BRCA1 AND BRCA2 AND mRNA结果一个都查不到。正确写法是(BRCA1[Gene Name] OR BRCA2[Gene Name]) AND Homo sapiens[Organism] AND mRNA[Title]。另一个常见问题是不加物种限定一条人类基因名能撞出一堆其他物种的同源序列。这里多说一句现在语义检索、向量数据库、RAG 检索增强在通用文档领域很火但生物信息学数据库检索的日常主战场仍然是受控词表和布尔检索。生物学命名体系混乱、同义名多但权威数据库的索引结构就是为布尔查询设计的结果可解释、可复现个人脚本先把 Entrez 这套用熟比盲目上向量检索更实在。4. 序列检索的终点站BLAST 从网页到本地4.1 文本检索查“注释”BLAST 查“相似性”文本检索只能找到“注释里写了这个词”的条目可很多时候你手里只有一段序列没有任何注释。这就要靠序列相似性检索也就是 BLAST。它不读注释只做两件事先在查询序列上切出短词word在目标库的索引里找命中再把命中区域向两端延伸做局部比对。理解这一点就能明白为什么它不做全库逐条比对但仍然能在大规模库中十几分钟跑完。BLAST 家族里最常用的是 blastn核酸对核酸、blastp蛋白对蛋白、blastx核酸翻译后对蛋白库。核酸序列查数据库时优先考虑同源比对用 blastn想从核酸推断蛋白功能用 blastx尤其适用于新测序但没有注释的转录本。blastx 对移码和终止密码子的容忍更好因为比对发生在蛋白层面进化保守性更明显。4.2 网页 BLAST 的最短流程和 4 个必调参数网页版 BLAST 的流程是选程序 → 贴序列 → 选数据库 → 选物种 → 调参数 → 提交。最短可用的流程里有 4 个参数值得单独调。第一个是数据库。nr 覆盖最全但注释混杂refseq_rna 干净稳定swissprot 适合蛋白功能快速判断。第二个是 E-value 阈值。E-value 表示“这条比对结果靠随机碰巧出现的期望次数”我一般设 1e-5做严格同源判断时放到 1e-10E-value 设得太大会把低复杂度区域和短保守 motif 当成同源证据。第三个是max_target_seqs控制返回多少条目标序列默认 100排查问题时改成 10 就能快速看头部结果。第四个是物种限定 Organism不限制时人类基因很可能先撞出一堆模式生物的同源序列。结果页里优先看三个数pident一致度、coverage查询序列覆盖比例、E-value。一致度高但 coverage 低只是共享一个短结构域不足以说明全长同源coverage 和 E-value 都好才敢写“该序列与某某基因高度同源”。我习惯先按 E-value 升序排再在头部结果里看 pident 和覆盖两个都过关才进下一步。4.3 本地建库与命令行 blastn批量检索的可靠路径网页 BLAST 适合零星查询批量处理时既慢又难复现。常见做法是下载参考序列到本地建库再用命令行 blastn 批量比对。下载好目标库的 fasta 文件后先用 makeblastdb 建索引makeblastdb -in refseq_human.fasta -dbtype nucl -parse_seqids -out human_ref-dbtype指定是核酸库nucl还是蛋白库prot-parse_seqids让索引保留 fasta 头里的登录号-out是索引前缀。建库只要一次之后做查询都复用这套索引。然后是核心检索命令blastn -query query.fasta -db human_ref \ -out result.tsv -outfmt 6 qseqid sseqid pident length mismatch gapopen qstart qend sstart send evalue bitscore \ -evalue 1e-5 -max_target_seqs 10 -num_threads 8这里的-outfmt 6 ...是制表符输出格式列含义分别是查询序列 ID、目标序列 ID、一致度百分比、比对长度、错配数、空位数、查询序列起止、目标序列起止、E-value、比对得分。脚本化之后用 awk 按列过滤就成了最朴素的“结果筛选器”例如awk -F\t $3 95 $4 200 result.tsv只保留长且高度一致的命中。-num_threads开多线程能明显提速但不建议超过机器物理核数否则磁盘 IO 反而成为瓶颈。5. 生物信息学数据库检索的 5 个常见坑与排查5.1 版本没对齐GRCh37 的坐标放到 GRCh38 上彻底翻车现象从旧文献或旧注释文件里拿到一批 SNP 坐标丢进按 GRCh38 建的注释流程结果位点落在基因间区注释全部丢失甚至把内含子当成了基因间区。 原因GRCh37 和 GRCh38 是两套坐标系同一位点在这两套坐标下的位置存在偏移尤其是结构变异富集的区域数据库检索本身没问题问题出在“拿旧版本坐标去新版本注释里查”。 解决先确认坐标来源的版本再决定是下载匹配版本的注释文件还是用 UCSC 的 liftOver 做坐标转换。更稳妥的做法是从一开始就在脚本头写清楚版本号并让所有输出文件名带上版本标签例如result_grch38.tsv不给后续分析留模糊空间。5.2 同一个基因三个 ID混用 ID 导致批量匹配大量丢失现象把 Ensembl ID、NCBI Gene ID、RefSeq 转录本 ID 混在一起做关联最后 join 出来只有一半数据剩下全是空值。 原因不同数据库对同一基因的名字体系不同而且不是一一对应一个基因可能对应多个转录本 ID一个蛋白可能对应多个 RefSeq 记录。直接用字符串匹配只会撞上运气。 解决选定一个主键我一般用 NCBI Gene ID 做全局主键。用 bioMart 或 E-utilities 的 esummary 做一次完整的 ID 映射把 Ensembl ID、转录本 ID、蛋白 ID 全部挂到这个主键上再交给下游。映射表要独立存一份方便以后换版本重新映射。5.3 检索式不可复现换个人、换个日期结果就差三倍现象团队里两个同学查同一个主题一个人查到 800 条另一个人查到 2500 条互相说对方查错了过一个月再查结果又变了一批。 原因检索式写法不同字段限定不同数据库也在持续更新。有人只写了关键词有人加了[Title]有人加了物种与发布时间过滤结果差异自然巨大。 解决把检索式当成代码来管理。每次执行存一条记录检索日期、数据库名称、检索表达式、返回数量。NCBI 的 History server 可以把检索式存到服务端拿到一个 query key 和 web environment后续增量更新时只用查新增部分。细节上能复现的检索式必须写全限定字段不能只甩一个关键词。5.4 nr 库的去冗余不等于唯一BLAST 结果里一个基因出现多个 accession现象BLAST 结果里同一个基因名出现三四条序列pident 都很高误以为找到了多个同源基因。 原因nr 库的去冗余是基于序列聚类的不是严格按基因取唯一一条同一基因的不同转录本、不同等位基因都可能保留下来。网页端看不到这一点很容易把“同一条基因的不同转录本”当新发现。 解决结果筛选时以 accession 去重而不是以序列名去重同时保留max_target_seqs的输出记录对比目标序列的 accession 前缀。NM_ 开头是 RefSeq 转录本XR_ 是非编码转录本XP_ 是预测蛋白看到同一基因名下多个 accession先按类型归类再判断。5.5 主库之间同步有延迟今天提交的序列明天才在别家查到现象在 DDBJ 提交了序列第二天在 NCBI 查不到开始怀疑自己提交失败。 原因三家主库的同步有固定周期提交后才能被原库公开检索但跨库同步往往要等下一个交换批次知识库的更新周期更长可能要数周。 解决以提交时拿到的 accession 为准先去提交的那家库按 accession 查确认状态是 released 还是 hold。做检索时给结果加一个“update date 筛选”避免把旧版本记录和官方更新的记录混在一起。跨库检索结论里写清数据来源库和查询日期比含糊地写“数据库查得”可靠得多。6. 把检索固化成本地小工具批量 ID 映射与下载脚本6.1 输入输出先定好脚本才有扩展性最后一步把前面零散的检索变成可复用工具。我建议输入格式定为“一行一个基因名”的文本文件输出格式是“每基因一个 FASTA 文件加一份日志”日志记录检索日期、每个基因命中的 ID 列表、实际下载的序列条数。输入输出定好了脚本就能从单体函数自然扩展成生成流程的一部分也方便接到 Snakemake 或 Nextflow 里。6.2 完整的批量下载脚本下面是一个按基因列表批量下载转录本的脚本可直接保存为batch_fetch.pyimport requests import time import sys from xml.etree import ElementTree as ET BASE https://eutils.ncbi.nlm.nih.gov/entrez/eutils API_KEY # 从环境变量读取例如 os.environ[NCBI_API_KEY] def search_ids(gene): term f{gene}[Gene Name] AND Homo sapiens[Organism] AND mRNA[Title] AND refseq[Filter] r requests.get(f{BASE}/esearch.fcgi, params{ db: nucleotide, term: term, retmax: 5, api_key: API_KEY }, timeout30) root ET.fromstring(r.text) return [e.text for e in root.iter(Id)] def fetch_fasta(ids, gene): out f{gene}.fasta with open(out, w) as fh: for rid in ids: r requests.get(f{BASE}/efetch.fcgi, params{ db: nucleotide, id: rid, rettype: fasta, retmode: text, api_key: API_KEY }, timeout30) if r.status_code 200: fh.write(r.text) print(f{gene}: 写入 {rid}) else: print(f{gene}: {rid} 下载失败HTTP {r.status_code}) time.sleep(0.2) if __name__ __main__: gene_list [line.strip() for line in open(sys.argv[1]) if line.strip()] for gene in gene_list: ids search_ids(gene) fetch_fasta(ids, gene)逻辑说明search_ids里加了refseq[Filter]保证拿到的都是 RefSeq 标准记录fetch_fasta增加 HTTP 状态码检查失败时输出错误信息而不是静默跳过time.sleep保持频率控制。整个脚本不做复杂计算只是把“检索式 → ID → FASTA”这条链固化成稳定流程也方便后续替换成自己的检索式模板。6.3 验证方法拿标准转录本做对照给未来留一双“后悔药”脚本写完后第一件事不是拿全量基因列表跑而是拿已知答案验证。以 TP53 为例人的标准转录本是 NM_000546BRCA1 的标准转录本是 NM_007294。如果脚本下载结果里没有出现这两个 accession说明检索式或字段限定有问题需要回头检查 term 的写法。验证通过后再铺开跑全量基因并把日志保存下来。做批量检索时我习惯在日志里同时记录三条信息检索日期、NCBI 数据库版本快照、检索式原文。数据库是动态变化的同一批基因半年后重跑结果可能不同不是脚本坏了而是库更新了。留好日志等于给未来的自己备了一剂后悔药。我自己刚开始也是手工在网页里一个个粘贴查询后来把“日期 检索式 结果数量”写进脚本日志才真正摆脱了黑匣子式的检索体验。生物信息学数据库及检索这件事做到能批量、能复现、能追溯才算是落地了。希望帮到你。本文还有配套的精品资源点击获取

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询