如何列出涉及SQLAlchemy语句的所有表格? 让我们假设有下面的查询如何列出涉及SQLAlchemy语句的所有表格
query = session.query(Address).filter(Address.person == person)
怎么能列出了在这种情况下使用该查询 表:人,地址
如何列出涉及SQLAlchemy语句的所有表格? 让我们假设有下面的查询如何列出涉及SQLAlchemy语句的所有表格
query = session.query(Address).filter(Address.person == person)
怎么能列出了在这种情况下使用该查询 表:人,地址
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)
你可以从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)
谢谢队友,我怎样才能处理插入和删除子查询? – sami
您的查询(可能)不打算实际使用的表底层的人,但只是比较'address.person_id =一般方式:person_id'。如果你在问题中包含你的模型,它会有所帮助。 –
@Ijaja感谢队友 – sami