2017-06-14 71 views
1

如何列出涉及SQLAlchemy语句的所有表格? 让我们假设有下面的查询如何列出涉及SQLAlchemy语句的所有表格

query = session.query(Address).filter(Address.person == person) 

怎么能列出了在这种情况下使用该查询 表:人,地址

+0

您的查询(可能)不打算实际使用的表底层的人,但只是比较'address.person_id =一般方式:person_id'。如果你在问题中包含你的模型,它会有所帮助。 –

+0

@Ijaja感谢队友 – sami

回答

1

RMN答案是好的,但它不能处理所有的情况下,子查询,delete语句,存在报表等

这里是提取所有表

from sqlalchemy.sql.visitors import ClauseVisitor 
from sqlalchemy import Table 


def extract_tables(sql_stmt): 
    tables = [] 
    visitor = ClauseVisitor() 
    cluase_iter = visitor.iterate(elem) 
    for e in cluase_iter: 
     if isinstance(e, Table): 
      tables.append(e) 
     if isinstance(e, (ValuesBase, UpdateBase)): 
      tables.append(e.table) 
    return set(tables) 
2

你可以从locate_all_froms得到所有的表,这样的事情

from sqlalchemy import Table 
from sqlalchemy.sql.selectable import Alias 

tables = set() 
for f in query.statement.locate_all_froms(): 
    if isinstance(f, Table): 
     tables.add(f) 
    elif isinstance(f, Alias): 
     tables.add(f.element) 
+0

谢谢队友,我怎样才能处理插入和删除子查询? – sami