更新时间:2022-12-30 19:15:38
这应该可以满足您的需求...
This should do what you are looking for ...
from sqlalchemy import (Column, create_engine, Integer, ForeignKey, Unicode,
Enum)
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, relationship
Base = declarative_base()
class Gene(Base):
__tablename__ = 'gene'
id = Column(Integer, primary_key=True)
name = Column(Unicode(64), unique=True)
def __init__(self, name):
self.name = name
class Experiment(Base):
__tablename__ = 'experiment'
id = Column(Integer, primary_key=True)
class Organ(Base):
__tablename__ = 'organ'
id = Column(Integer, primary_key=True)
name = Column(Unicode(64), unique=True)
def __init__(self, name):
self.name = name
class Measurement(Base):
__tablename__ = 'measurement'
id = Column(Integer, primary_key=True)
experiment_id = Column(Integer, ForeignKey(Experiment.id))
gene_id = Column(Integer, ForeignKey(Gene.id))
organ_id = Column(Integer, ForeignKey(Organ.id))
# Add your measured values here
expression = Column(Enum('UP', 'DOWN'))
# ...
experiment = relationship(Experiment, backref='measurements')
gene = relationship(Gene, backref='measurements')
organ = relationship(Organ, backref='measurements')
def __repr__(self):
return 'Experiment %d: %s, %s, %s' % (self.experiment.id,
self.gene.name, self.organ.name, self.expression)
if __name__ == '__main__':
engine = create_engine('sqlite://')
session = sessionmaker(engine)()
Base.metadata.create_all(engine)
#
# Creating the data
#
x = Gene('Gene X')
y = Gene('Gene Y')
z = Gene('Gene Z')
heart = Organ('Heart')
lungs = Organ('Lungs')
brain = Organ('Brain')
session.add_all([x, y, z, heart, lungs, brain])
session.commit()
experiment_1 = Experiment()
experiment_1.measurements.extend(
[Measurement(gene_id=x.id, organ_id=heart.id, expression='UP'),
Measurement(gene_id=x.id, organ_id=lungs.id, expression='UP'),
Measurement(gene_id=x.id, organ_id=brain.id, expression='DOWN'),
Measurement(gene_id=y.id, organ_id=brain.id, expression='UP'),
Measurement(gene_id=z.id, organ_id=brain.id, expression='DOWN')])
experiment_2 = Experiment()
experiment_2.measurements.extend(
[Measurement(gene_id=y.id, organ_id=lungs.id, expression='UP'),
Measurement(gene_id=y.id, organ_id=lungs.id, expression='UP'),
Measurement(gene_id=y.id, organ_id=brain.id, expression='UP'),
Measurement(gene_id=x.id, organ_id=brain.id, expression='UP'),
Measurement(gene_id=z.id, organ_id=heart.id, expression='UP')])
session.add_all([experiment_1, experiment_2])
session.commit()
#
# Querying the data
#
print('All measurements in the first experiment')
experiment = session.query(Experiment).filter(Experiment.id == 1).one()
for measurement in experiment.measurements:
print(measurement)
print('')
print('All measurements of Gene X')
gene_x = session.query(Gene).filter(Gene.name == 'Gene X').one()
for measurement in gene_x.measurements:
print(measurement)
print('')
print('All measurements of the brain')
the_brain = session.query(Organ).filter(Organ.name == 'Brain').one()
for measurement in the_brain.measurements:
print(measurement)
print('')