[[データベース構築>OpenBabel/Cartridge/DB]]で用意したテーブルにChEMBLのデータを登録してみる。 ChEMBLのSDFファイルは、ここから取得可能で ftp://ftp.ebi.ac.uk/pub/databases/chembl/ChEMBLdb/releases/ ここでは[[RDKit/Cartridge/ChEMBL]]で使用した&color(green){chembl_18};を使う。 chembl_18.sdfをテーブルに流し込むpythonスクリプトを用意した。 中身は、SDFの区切り文字 &color(green){''$$$$''}; で個々のsdfに分解して投入する簡単な物。 使う前にpythonからMySQLを繋ぐパッケージをインストールします #code(nonumber){{ [root@s ~]# yum install MySQL-python [root@s ~]# }} 使用するスクリプト reg.py #code(python,number,nooutline,noblock,noliteral,nocomment,nomenu,noicon,nolink){{ #!/bin/python import sys import MySQLdb db= MySQLdb.connect(host = 'localhost',user="root", passwd="", db = 'chemdb',charset='utf8') c = db.cursor() i=0 sdf="" f=open("chembl_18.sdf",'r') while 1: line = f.readline() if not line: break if line[0:4] == "$$$$": i += 1 sdf += line sql = "INSERT INTO mols(id,sdf) values (%s, " % i + "'%s')" % sdf c.execute(sql) sdf = "" else: sdf += line f.close() db.commit() c.close() db.close() }} っで、実行 使用しているマシンはi7-4771(3.5GHz)で32GB men、ssd。 #code(nonumber){{ [root@s ~]# time python reg.py real 4m22.641s user 1m46.707s sys 0m12.123s [root@s ~]# }} 次にSDFからSMILESを作成してchemにデータをupdateさせます。 #code(nonumber){{ [root@s ~]# mysql -Dchemdb mysql> mysql> desc mols; +--------+------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+------------------+------+-----+---------+-------+ | id | int(11) unsigned | NO | PRI | NULL | | | sdf | text | NO | | NULL | | | smiles | text | YES | | NULL | | +--------+------------------+------+-----+---------+-------+ 3 rows in set (0.00 sec) mysql> mysql> select count(*) from mols; +----------+ | count(*) | +----------+ | 1352681 | +----------+ 1 row in set (6.72 sec) mysql> mysql> UPDATE mols SET smiles = MOLECULE_TO_SMILES(sdf); Query OK, 440055 rows affected (12 min 20.39 sec) Rows matched: 440055 Changed: 440055 Warnings: 0 Query OK, 1352681 rows affected (28 min 16.24 sec) Rows matched: 1352681 Changed: 1352681 Warnings: 0 --sdfからmolへ mysql> alter table mols add mol text; mysql> update mols SET mol = MOLFILE_TO_MOLECULE(sdf); Query OK, 440055 rows affected (5 min 40.77 sec) Rows matched: 440055 Changed: 440055 Warnings: 0 mysql> update chem set fp2 = FINGERPRINT2(mol); Query OK, 440055 rows affected (9 min 28.08 sec) Rows matched: 440055 Changed: 440055 Warnings: 0 mysql> update chem set obserialized = MOLECULE_TO_SERIALIZEDOBMOL(mol); Query OK, 440055 rows affected (5 min 22.70 sec) Rows matched: 440055 Changed: 440055 Warnings: 0 }} alter table chem add mol text; update chem set mol = MOLFILE_TO_MOLECULE(sdf); alter table chem add fp2 blob; update chem set fp2 = FINGERPRINT2(mol); alter table chem add obserialized blob; update chem set obserialized = MOLECULE_TO_SERIALIZEDOBMOL(mol); mysql> alter table mols add fp2 blob; mysql> update mols set fp2 = FINGERPRINT2(mol); mysql> alter table mols add obserialized blob; mysql> update mols set obserialized = MOLECULE_TO_SERIALIZEDOBMOL(mol); }}