prx = select([md_tab.c.molecule_design_id, ssd_tab.c.modification, ssd_tab.c.sequence], where_clause, from_obj=md_tab.outerjoin(ssd_tab)).execute() elif mt_id == 'COMPOUND': cmp_tab = metadata.tables['compound'] prx = select([md_tab.c.molecule_design_id, cmp_tab.c.smiles], where_clause, from_obj=md_tab.outerjoin(cmp_tab)).execute() cch = dict([(row[0], row[1:]) for row in prx.fetchall()]) print 'Fetching molecule designs.' print mt = sess.query(MoleculeType).filter_by(molecule_type_id=mt_id).one() new_structs = set() mds = sess.query(MoleculeDesign).filter_by(molecule_type=mt).all() for idx, md in enumerate(mds): print '%s: %d (%3d %%)' % (md.molecule_type_id, md.molecule_design_id, int((idx + 1) * 100 / len(mds))) process_design(md, cch[md.molecule_design_id], new_structs) sess.add_all(new_structs) if COMMIT and len(WARNINGS) == 0: sess.commit() else: if WARNINGS: print 'Warnings occurred - rolling back transaction.' print 'Warning messages:' print '\n'.join(WARNINGS) sess.rollback()