2017-06-14 33 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

相關問題