2016-05-10 6 views
1

は私の現在のコードです:明白な理由のためにSQLAlchemyの:ここでは変数属性によってクエリ

def hypergeometric(query_genes, filename, input_format): 

    if input_format == 'ENSEMBLID': 
     OCRs = OpenChromatinRegion.query 
       .filter(OpenChromatinRegion.filename == filename) 
       .filter(OpenChromatinRegion.ENSEMBLID.in_(query_genes)) 
       .filter(OpenChromatinRegion.ENSEMBLID != 'NA') 
       .all() 

    elif input_format == 'gene_symbol': 
     OCRs = OpenChromatinRegion.query 
       .filter(OpenChromatinRegion.filename == filename) 
       .filter(OpenChromatinRegion.gene_symbol.in_(query_genes)) 
       .filter(OpenChromatinRegion.gene_symbol != 'NA') 
       .all() 

、これは非常に痛いです。クエリにinput_format変数を補間する方法はありますか?

答えて

2

getattrを使用して必要な属性を抽出し、フィルタで使用することができます。

def hypergeometric(query_genes, filename, input_format): 

    input_format_attribute = getattr(OpenChromatinRegion, input_format, None)  
    if input_format_attribute is not None: 
     OCRs = OpenChromatinRegion.query 
       .filter(OpenChromatinRegion.filename == filename) 
       .filter(input_format_attribute.in_(query_genes)) 
       .filter(input_format_attribute != 'NA') 
       .all() 
関連する問題