SQLAlchemy类的方法是反射:
reflect(bind='__all__', app=None)
Reflects tables from the database.
它只有两个参数:bind和app。我在metadata.tables
找不到任何观点。
Native SqlAlchemy的方法反射有更多的参数和视图= False是其中一个允许视图反射,如果设置为True。
reflect(bind=None, schema=None, views=False, only=None, extend_existing=False, autoload_replace=True, **dialect_kwargs)
是否有可能以某种方式反映Flask-SqlAlchemy中的数据库视图?
答案 0 :(得分:3)
对SQLAlchemy类进行子类化并覆盖该函数。这是Flask领域中可接受的自定义方法。 Flask文档本身讨论了对Flask类进行子类化以获得所需的内容。
这未经过测试,但这是一个开始。它允许传递kwargs来执行和反射,将它们传递给真正的操作。
class MySQLAlchemy(SQLAlchemy):
def _execute_for_all_tables(self, app, bind, operation, **kwargs):
app = self.get_app(app)
if bind == '__all__':
binds = [None] + list(app.config.get('SQLALCHEMY_BINDS') or ())
elif isinstance(bind, basestring) or bind is None:
binds = [bind]
else:
binds = bind
for bind in binds:
tables = self.get_tables_for_bind(bind)
op = getattr(self.Model.metadata, operation)
op(bind=self.get_engine(app, bind), tables=tables, **kwargs)
def reflect(self, bind='__all__', app=None, **kwargs):
self._execute_for_all_tables(app, bind, 'reflect', **kwargs)