- 一、环境配置
- 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中操作数据库了
二、操作使用
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
- 操作失误还可以删除数据库.
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代码及源文件在这里。