如何列出SQLAlchemy语句中涉及的所有表? 我们假设我们有以下查询
query = session.query(Address).filter(Address.person == person)
如何列出此查询使用的表 在这种情况下:人,地址
答案 0 :(得分: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)
答案 1 :(得分:1)
r-m-n答案很好,但它不处理所有情况,子查询,删除语句,存在语句等
这是提取所有表格的一般方法
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)