2017-07-03 64 views
0

如何從SQLAlchemy的提取表形同虛設聲明 假設我們有下面的代碼提取表名稱存在查詢

from sqlalchemy.ext.declarative import declarative_base 
from sqlalchemy.orm import sessionmaker 

Base = declarative_base() 

class Person(Base): 
    __tablename__ = 'person' 
    id = Column(Integer, primary_key=True) 
    name = Column(String(250), nullable=False) 

engine = create_engine('mysql://...') 
Session = sessionmaker(bind=engine) 

conn = engine.connect() 
session = Session(bind=conn) 
query_exists = session.query(Person).exists() 

我怎樣才能從query_exists提取表名?

回答

0
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)