RDKit|支持RDKit的PostgreSQL环境搭建与基本操作

文章目录

  • 一、环境配置
    • 1.windows下的安装与初始化
    • 2.用户设置与服务启动
  • 二、操作使用
    • 1.cmd操作
    • 2.python操作

一、环境配置

PostgreSQL是一个开源、可扩展的关系型数据库,rdkit官网文档里也是以postgresql作为案例进行演示。本文介绍带rdkit插件的postgresql在windows系统上的环境配置,以及在python环境下的基本操作。

1.windows下的安装与初始化

  • 直接在cmd下使用conda安装继承了rdkit插件的postgresql
C:\Users\Administrator> conda install -c rdkit rdkit-postgresql
  • 安装完成后需要初始化一下,在"-D"后加上数据库的数据存储目录
C:\Users\Administrator> initdb –D d:\postgresql\data

2.用户设置与服务启动

  • 安装完成后,直接在cmd中执行“postgres -D d:\postgresql\data”启动服务会出现如下提示,即不能用带管理员权限的用户来启动服务
Execution of PostgreSQL by a user with administrative permissions is not permitted.
  • 接下来在cmd命令行中进行用户设置,这部分内容会被360报错,需要暂时关闭杀毒软件或手动操作
  • 新建一个用户postgres
C:\Users\Administrator> net user postgres /add
  • 激活该用户
C:\Users\Administrator> net user postgres /active:yes
  • 中设置密码
C:\Users\Administrator> net user postgres 
  • 切换到postgres用户,并根据提示输入上一步中设置的密码
C:\Users\Administrator> runas /user:postgres cmd
  • 在弹出的新窗口中启动postgresql服务
C:\Users\Administrator> postgres -D d:\postgresql\data
  • 服务启动成功,可以在cmd或python中操作数据库了
    RDKit|支持RDKit的PostgreSQL环境搭建与基本操作_第1张图片

二、操作使用

1.cmd操作

  • 再打开一个cmd终端,创建一个新数据库命名为mols(需要添加conda的环境变量)
C:\Users\Administrator> createdb mols
  • 为数据库加载rdkit扩展模块
C:\Users\Administrator> psql –c “create extension rdkit” mols
  • 进入mols数据库的交互界面,可以进行增删改查操作了
C:\Users\Administrator> psql mols
  • 查询总数据量
mols=# select count(*) from info;
  • 操作失误还可以删除数据库.
C:\Users\Administrator> dropdb mols

2.python操作

  • 这里选择psycopg2库用于连接postgresql,同样使用conda安装psycopg2
C:\Users\Administrator> conda install -c conda-forge psycopg2
  • 接下来导入psycopg2,并创建一个connection连接:connect()
    database:设置连接数据库的名称
    user:用户
    password:密码
    port:端口号,默认5432
    host:宿主ip
>>> import psycopg2
>>> connection = psycopg2.connect(database='mols',
>>>                               user='Administrator',
>>>                               password='postgresql',
>>>                               port='5432',
>>>                               host='127.0.0.1')
>>> type(connection)
psycopg2.extensions.connection
  • 创建一个游标cursor,在内存中开辟一块区域,用于存储数据操作的结果:connection.cursor()
>>> cur = connection.cursor()
>>> type(cur)
psycopg2.extensions.cursor
  • 执行一条SQL语句测试一下,查看操作用户
>>> cur.execute("select * from current_user;")
>>> reply = cur.fetchall()
>>> reply
[('Administrator',)]
  • 写一条postgresql语句,记为query,创建一个数据表,命名为info,并表添加列名,设置数据格式
  • 使用游标来执行语句:execute(query)
>>> query = '''create table info(id serial primary key,
>>>                              database text,
>>>                              project text,
>>>                              SMILES text,
>>>                              HA integer,
>>>                              HD integer,
>>>                              RB integer,
>>>                              MW float,
>>>                              LOGP float);'''
>>> cur.execute(query)
  • 读取1000条左右的数据
>>> import pandas as pd
>>> df = pd.read_excel('ippin.xlsx')

获取mol对象列表

>>> from rdkit import Chem
>>> mol_list = [x for x in [Chem.MolFromSmiles(i) for i in df.SMILES] if x]
>>> len(mol_list)
1351

创建一个描述符计算对象,将类药五规则设置到计算器中,这部分不明白的可以参考这篇文章

from rdkit.ML.Descriptors import MoleculeDescriptors
des_list = ['MolWt', 'NumHAcceptors', 'NumHDonors', 'MolLogP', 'NumRotatableBonds']
calculator = MoleculeDescriptors.MolecularDescriptorCalculator(des_list)
  • 使用计算器,对每个分子计算所需描述符
>>> feat_list = ['%s'%str(calculator.CalcDescriptors(mol)) for mol in mol_list]
  • 在query中写入一条向数据表info插入数据的语句,并执行该语句
>>> query = "insert into info (MW, HA, HD, LOGP, RB) values %s" % (','.join(feat_list))
>>> cur.execute(query)
  • 通过聚合函数count(*)看一下有多少条结果
  • 通过游标获取查询结果:fetchall()
>>> query = 'select count(*) from info'
>>> cur.execute(query)
>>> reply = cur.fetchall()
>>> reply
[(1351,)]
  • 最后操作完后,记得提交对数据库的修改:commit()
>>> connection.commit()

本文参考自rdkit、postgresql安装文档。
python代码及源文件在这里。

你可能感兴趣的:(rdkit,数据库)