RDKit|在PostgreSQL中进行分子结构搜索与查询

文章目录
一、环境搭建
二、数据表准备
三、结构搜索与查询

  • 1.smiles子结构搜索
  • 2.smarts子结构搜索
  • 3.立体信息的结构搜索
  • 4.带取代基的结构搜索

一、环境搭建

本文以windows为例进行操作和演示。假设都已经安装好了postgresql,下面依次进行用户切换、启动服务端、创建数据库、导入数据、连接数据库、加载插件、函数测试。在windows上安装带rdkit插件的postgresql以及基本操作可以参考这篇文章

  • 在cmd中切换到postgres用户
runas /user:postgres cmd
  • 在postgres用户下,启动服务端,指定数据库位置
postgres -D d:\postgresql\data
  • 在新cmd终端中创建molecules数据库
createdb molecules
  • 使用python创建info表格,加入id、smiles、LOGP等列,并导入1000条分子数据。代码可以参考这里
  • 导入完成数据后,连接进入数据库
psql molecules
  • 在“molecules=#”提示符下,查看刚才创建的info表
select column_name from information_schema.columns WHERE table_name ='info';
  • 为当前数据库加载rdkit插件
create extension rdkit;
  • 测试下rdkit插件,能正常输出结果表明环境准备成功
select id, mol_from_smiles(smiles::cstring) mol_col from info limit 5;

二、数据表准备

数据库、rdkit插件都没问题后,接下来依次新建schema、转换mol对象、建立数据表。

  • 新建schema,命名为rdk。schema相当于一个命名空间,允许多个用户建立各自的schema来同时操作数据库,每个schema下的对象名字不能重复,但不同的schema中可以重复。如果不指定schema时,默认在public下操作。
create schema rdk;
  • (删除名为rdk的schema)
drop schema rdk cascade;
  • 查看有哪些schema
select nspname from pg_namespace;
  • 将SMILES转换为mol对象,列名记为m,并连同id一起保存在rdk下的mols表中
  • 其中mol_from_smiles(smi_col::cstring)是rdkit函数,能够将smi_col列作为字符串读取并转换为mol对象
select * into rdk.mols from (select id, mol_from_smiles(smiles::cstring) m from info) tmp where m is not null;
  • 查看rdk下的数据表,相当于mysql的show databases
select table_name from information_schema.tables WHERE table_schema = 'rdk';
  • 对rdk.mols表中的m列建立索引,命名为molidx
create index molidx on rdk.mols using gist(m);
  • 将rdk.mols表中的id列设为主键,主键必须唯一且非空
alter table rdk.mols add primary key (id);

三、结构搜索与查询

终于进入正题了,准备俩小时,查询五分钟。

1.smiles子结构搜索

  • 查看多少分子包含了苯环
- select count(*) from rdk.mols where m@>'c1ccccc1';
  • 查看前5条包含了吲哚结构的分子
- select id, m from rdk.mols where m@>'C1(NC=C2)=C2C=CC=C1' limit 5;

2.smarts子结构搜索

  • 查看多少分子包含了苯环,在smarts后需要加上"::qmol"。smarts查询一般会比smiles慢一些。
 select count(*) from rdk.mols where m@>'c1[o,s]ncn1'::qmol;

3.立体信息的结构搜索

  • 在搜索时,无论在查询smiles或smarts中是否加入了手性符号,都是不考虑立体结构的。想设置立体结构匹配可以将do_chiral_sss设置为true:
set rdkit.do_chiral_sss=true;
  • 再进行立体结构的搜索:
select * from rdk.mols where m@>'NC(=O)[C@@H]1CCCN1C=O' limit 10;

4.带取代基的结构搜索

  • 可以使用mol_adjust_query_properties()函数,对搜索结构进行更精确的控制。
  • 该函数作用
  1. 将"*"匹配为任意原子
  2. 对环中的原子加入连接度的匹配,也就是只能匹配明确的环结构或指定了取代基的环结构
  3. 匹配芳香性
  • 使用该函数配合smiles和通配符"*",可以搜索具有特定位取代基(侧链)的子结构。以搜索2,6-双取代吡啶为例:
select id, m from rdk.mols where m@>mol_adjust_query_properties('*c1cccc(*)n1') limit 10;
  • 也可以通过JSON格式的参数来停用连接度匹配,这样,除了指定位置必须含有取代基外,其他位置也可以含有取代基:
select id, m from rdk.mols where m@>mol_adjust_query_properties('*c1cccc(*)n1', '{"adjustDegree":false}') limit 10;
  • 还可以通过其他的参数参数进行更精细的匹配,这里就不深入讨论了,感兴趣可以研究下下方链接里的内容。

本文参考自rdkit官方文档

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值