这已经被困了一天以上,我找到的例子都没有用。我是SQLALCHEMY的新手,我觉得这些文档不是很有启发性。
查询(到目前为止):
prey = alias(ensembl_genes, name='prey')
bait = alias(ensembl_genes, name='bait')
query = db.session.query(tap,prey,bait).\
join(prey, tap.c.TAP_PREY_ENSEMBL_GENE_ID==prey.c.ENSEMBL_GENE_ID).\
join(bait, tap.c.TAP_BAIT_ENSEMBL_GENE_ID==bait.c.ENSEMBL_GENE_ID).\
filter(\
or_(\
tap.c.TAP_PREY_ENSEMBL_GENE_ID=='ENSG00000100360',\
tap.c.TAP_BAIT_ENSEMBL_GENE_ID=='ENSG00000100360'\
)\
).\
order_by(desc(tap.c.TAP_UNIQUE_PEPTIDE_COUNT))
tap是指相互作用基因的表格。一个交互者被称为“诱饵”而另一个被称为“猎物”。猎物和诱饵是同一个表的别名,其中包含有关这些基因的其他信息。目标是选择与给定基因'ENSG00000100360'的所有相互作用作为诱饵或猎物。
问题:
这个查询返回大约20个左右的列,但我只需要六个特定的列,每个原始表中有两个(我也想重命名它们)。从interwebz上的例子我想我应该补充:
options(
Load(tap).load_only('TAP_UNIQUE_PEPTIDE_COUNT','TAP_SEQUENCE_COVERAGE'),
Load(prey).load_only('ENSEMBL_GENE_SYMBOL','ENSEMBL_GENE_ID'),
Load(bait).load_only('ENSEMBL_GENE_SYMBOL','ENSEMBL_GENE_ID')
)
但是这给了我以下错误:
文件“/Users/jvandam/Github/syscilia/tools/BDT/quest/blueprints/genereport.py”,第246行,在createTAPMSView中 负载(抽头).load_only( 'TAP_UNIQUE_PEPTIDE_COUNT', 'TAP_SEQUENCE_COVERAGE') 在 init 中输入文件“/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/sqlalchemy/orm/strategy_options.py”,第82行 self.path = insp._path_registry AttributeError:'Table'对象没有属性'_path_registry'
我无法在谷歌上找到关于如何处理这件事的任何事情。 sqlalchemy表对象是从数据库表元数据中创建的。
我尝试使用sqlalchemy orm语句模拟的是:
SELECT
prey.ENSEMBL_GENE_SYMBOL AS PREY_ENSEMBL_GENE_SYMBOL,
prey.ENSEMBL_GENE_ID AS PREY_ENSEMBL_GENE_ID,
bait.ENSEMBL_GENE_SYMBOL AS BAIT_ENSEMBL_GENE_SYMBOL,
bait.ENSEMBL_GENE_ID AS BAIT_ENSEMBL_GENE_ID,
t.TAP_UNIQUE_PEPTIDE_COUNT AS UNIQUE_PEPTIDE_COUNT,
t.TAP_SEQUENCE_COVERAGE AS SEQUENCE_COVERAGE
FROM TAP as t
INNER JOIN ENSEMBL_GENES AS prey
ON tap.TAP_PREY_ENSEMBL_GENE_ID=prey.ENSEMBL_GENE_ID
INNER JOIN ENSEMBL_GENES AS bait
ON t.TAP_BAIT_ENSEMBL_GENE_ID=bait.ENSEMBL_GENE_ID
WHERE
t.TAP_PREY_ENSEMBL_GENE_ID='ENSG00000100360'
OR t.TAP_BAIT_ENSEMBL_GENE_ID='ENSG00000100360'
ORDER BY t.TAP_UNIQUE_PEPTIDE_COUNT DESC
任何人都可以帮我修复我的查询吗? 提前致谢! 约翰
答案 0 :(得分:8)
只需使用以下内容更改此部分db.session.query(tap,prey,bait).\
:
db.session.query(\
prey.ENSEMBL_GENE_SYMBOL.label("PREY_ENSEMBL_GENE_SYMBOL"),
prey.ENSEMBL_GENE_ID.label("PREY_ENSEMBL_GENE_ID"),
bait.ENSEMBL_GENE_SYMBOL.label("BAIT_ENSEMBL_GENE_SYMBOL"),
bait.ENSEMBL_GENE_ID.label("BAIT_ENSEMBL_GENE_ID"),
tap.TAP_UNIQUE_PEPTIDE_COUNT.label("UNIQUE_PEPTIDE_COUNT"),
tap.TAP_SEQUENCE_COVERAGE.label("SEQUENCE_COVERAGE"),
).\
select_from(tap).\ # @note: need this in so that FROM and JOINs are in desired order
这将只选择您需要的列。