编辑:我做了一个short question,因为我觉得这个太长了,对不起
首先,我是一个新来的数据库,编程语言等。。。很抱歉,如果这个问题不太恰当也不具体,任何帮助或指导将不胜感激。。。在
我通过查询数据库的方式来检索我自己的数据库。在
例如,创建这个数据库的目的是让用户引入一个基因,以了解它在生物体中的哪个部位过度(向上)或不足(向下)表达,以及在哪些实验中见过这种类型的表达。在
目前,我所做的只是查询现有的数据库并解析json结果,以获得每个生物体部分、所有过度表达或表达不足的基因(以及我获得的每个基因的实验结果,这些实验都报告了这种表达类型)
(大脑中)
基因1
Experiment1 UP
Experiment2 UP
Experiment3 UP
Experiment4 DOWN
基因2
^{pr2}$我想我需要的不同表格是:“基因”、“器官”、“实验”和“表达类型”(以及“基因2实验2器官”)
考虑到一个基因可以在多个生物体的多个部分表达,并且可以有与多个实验相关的不同类型的表达,一个实验可以包含多个基因(多对多关系)
我首先想知道的是如何添加关系数据,并知道我的尝试是正确的,还是应该更改数据库的模式/思想。。。在
我的第一个尝试是:
###########################################
DATABASE DEFINITION
###########################################
from sqlalchemy import create_engine, Column, Integer, String, Date, ForeignKey, Table, Float
from sqlalchemy.orm import sessionmaker, relationship, backref
from sqlalchemy.ext.declarative import declarative_base
import requests
Base = declarative_base()
Genes2experiments2organs = Table('genes2experiments2organs',Base.metadata,
Column('gene_id', String, ForeignKey('genes.id')),
Column('experiment_id', String, ForeignKey('experiments.id')),
Column('organ_id', String, ForeignKey('organs.id'))
)
class Genes(Base):
__tablename__ = 'genes'
id = Column(String(45), primary_key=True)
def __init__(self, id=""):
self.id= id
def __repr__(self):
return "<genes(id:'%s')>" % (self.id)
class Experiments(Base):
__tablename__ = 'experiments'
id = Column(String(45), primary_key=True)
experiments = relationship("Experiments", secondary=Genes2experiments2organs, backref="genes")
organs = relationship("Organs", secondary=Genes2experiments2organs, backref="genes")
def __init__(self, id=""):
self.id= id
def __repr__(self):
return "<experiments(id:'%s')>" % (self.id)
class Organs(Base):
__tablename__ = 'organs'
id = Column(String(45), primary_key=True)
def __init__(self, id=""):
self.id= id
def __repr__(self):
return "<organs(id:'%s')>" % (self.id)
class Expression_type(Base):
__tablename__ = 'expression_type'
id = Column(String(45), primary_key=True)
def __init__(self, id=""):
self.id= id
def __repr__(self):
return "<expression_type(id:'%s')>" % (self.id)
#####################################################
INSERTING DATA
#####################################################
def setUp():
global Session
engine=create_engine('mysql://root:password@localhost/db_name?charset=utf8', pool_recycle=3600,echo=False)
Session=sessionmaker(bind=engine)
def add_data(): ## I am just adding genes without taking into account the other related data to these genes.....
session=Session()
for i in range(0,1000,200):
request= requests.get('http://www.ebi.ac.uk/gxa/api/v1',params={"updownInOrganism_part":"brain","rows":200,"start":i})
result = request.json
for item in result['results']:
gene_to_add = item['gene']['ensemblGeneId']
session.commit()
session.close()
setUp()
add_data()
session=Session()
genes=session.query(Genes).all()
print "List of genes introduced:"
for gene in genes:
print gene.id
session.close()
所以,有了这段代码,我只填充了“基因”表,但没有考虑到与数据库中其他数据的关系。。。添加关系数据的过程是什么?以及一种避免插入重复基因的方法,例如通过API查询填充表时??在
顺便说一句,正如你所见,我没有把所有的多对多的关系(次要的),只是放在“基因”表中,因为我不确定我是对是错。。。谢谢你
这应该是你想要的。。。在
相关问题 更多 >
编程相关推荐