I have a class "catalogue" in my database with multiple columns. Flask-AppBuilder however seems to miss them, as it throws AttributeError: 'tuple' object has no attribute 'columns'
.
The table has 4 columns and it works fine if I specify them manually using the model but it fails with autoload using the flask_appbuilder Base object. Autoloading works for other tables. How can I get autoloading to work for this the catalogue table?
Schema
create table catalogue(
suffix VARCHAR(200) PRIMARY KEY,
label VARCHAR(200) NOT NULL,
CHECK (label <> ''),
type cataloguetype NOT NULL,
uri VARCHAR(229) GENERATED ALWAYS AS ('http://hitontology.eu/ontology/' || suffix) STORED
Code
from sqlalchemy import create_engine
from flask_appbuilder import Model, Base
engine = create_engine(config.SQLALCHEMY_DATABASE_URI)
class Catalogue(Base):
__table__= Table("catalogue", Base.metadata,autoload=True,autoload_with=engine)
Console Output
2020-08-28 12:34:08,809:INFO:flask_appbuilder.api:Registering route /api/v1/menu/ ['GET']
Traceback (most recent call last):
File "/home/konrad/projekte/hito/database-frontend/venv/bin/flask", line 8, in <module>
sys.exit(main())
File "/home/konrad/projekte/hito/database-frontend/venv/lib/python3.8/site-packages/flask/cli.py", line 967, in main
cli.main(args=sys.argv[1:], prog_name="python -m flask" if as_module else None)
File "/home/konrad/projekte/hito/database-frontend/venv/lib/python3.8/site-packages/flask/cli.py", line 586, in main
return super(FlaskGroup, self).main(*args, **kwargs)
File "/home/konrad/projekte/hito/database-frontend/venv/lib/python3.8/site-packages/click/core.py", line 782, in main
rv = self.invoke(ctx)
File "/home/konrad/projekte/hito/database-frontend/venv/lib/python3.8/site-packages/click/core.py", line 1259, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/home/konrad/projekte/hito/database-frontend/venv/lib/python3.8/site-packages/click/core.py", line 1066, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/home/konrad/projekte/hito/database-frontend/venv/lib/python3.8/site-packages/click/core.py", line 610, in invoke
return callback(*args, **kwargs)
File "/home/konrad/projekte/hito/database-frontend/venv/lib/python3.8/site-packages/click/decorators.py", line 73, in new_func
return ctx.invoke(f, obj, *args, **kwargs)
File "/home/konrad/projekte/hito/database-frontend/venv/lib/python3.8/site-packages/click/core.py", line 610, in invoke
return callback(*args, **kwargs)
File "/home/konrad/projekte/hito/database-frontend/venv/lib/python3.8/site-packages/flask/cli.py", line 848, in run_command
app = DispatchingApp(info.load_app, use_eager_loading=eager_loading)
File "/home/konrad/projekte/hito/database-frontend/venv/lib/python3.8/site-packages/flask/cli.py", line 305, in __init__
self._load_unlocked()
File "/home/konrad/projekte/hito/database-frontend/venv/lib/python3.8/site-packages/flask/cli.py", line 330, in _load_unlocked
self._app = rv = self.loader()
File "/home/konrad/projekte/hito/database-frontend/venv/lib/python3.8/site-packages/flask/cli.py", line 392, in load_app
app = locate_app(self, import_name, None, raise_if_not_found=False)
File "/home/konrad/projekte/hito/database-frontend/venv/lib/python3.8/site-packages/flask/cli.py", line 240, in locate_app
__import__(module_name)
File "/home/konrad/projekte/hito/database-frontend/app/__init__.py", line 32, in <module>
from . import views
File "/home/konrad/projekte/hito/database-frontend/app/views.py", line 6, in <module>
from .models import Softwareproduct, Catalogue, Classified#, interoperabilitystandard
File "/home/konrad/projekte/hito/database-frontend/app/models.py", line 59, in <module>
class Catalogue(Base):
File "/home/konrad/projekte/hito/database-frontend/venv/lib/python3.8/site-packages/flask_sqlalchemy/model.py", line 67, in __init__
super(NameMetaMixin, cls).__init__(name, bases, d)
File "/home/konrad/projekte/hito/database-frontend/venv/lib/python3.8/site-packages/flask_sqlalchemy/model.py", line 121, in __init__
super(BindMetaMixin, cls).__init__(name, bases, d)
File "/home/konrad/projekte/hito/database-frontend/venv/lib/python3.8/site-packages/sqlalchemy/ext/declarative/api.py", line 76, in __init__
_as_declarative(cls, classname, cls.__dict__)
File "/home/konrad/projekte/hito/database-frontend/venv/lib/python3.8/site-packages/sqlalchemy/ext/declarative/base.py", line 131, in _as_declarative
_MapperConfig.setup_mapping(cls, classname, dict_)
File "/home/konrad/projekte/hito/database-frontend/venv/lib/python3.8/site-packages/sqlalchemy/ext/declarative/base.py", line 160, in setup_mapping
cfg_cls(cls_, classname, dict_)
File "/home/konrad/projekte/hito/database-frontend/venv/lib/python3.8/site-packages/sqlalchemy/ext/declarative/base.py", line 194, in __init__
self._early_mapping()
File "/home/konrad/projekte/hito/database-frontend/venv/lib/python3.8/site-packages/sqlalchemy/ext/declarative/base.py", line 199, in _early_mapping
self.map()
File "/home/konrad/projekte/hito/database-frontend/venv/lib/python3.8/site-packages/sqlalchemy/ext/declarative/base.py", line 695, in map
self.cls.__mapper__ = mp_ = mapper_cls(
File "<string>", line 2, in mapper
File "<string>", line 2, in __init__
File "/home/konrad/projekte/hito/database-frontend/venv/lib/python3.8/site-packages/sqlalchemy/util/deprecations.py", line 139, in warned
return fn(*args, **kwargs)
File "/home/konrad/projekte/hito/database-frontend/venv/lib/python3.8/site-packages/sqlalchemy/orm/mapper.py", line 721, in __init__
self._configure_properties()
File "/home/konrad/projekte/hito/database-frontend/venv/lib/python3.8/site-packages/sqlalchemy/orm/mapper.py", line 1499, in _configure_properties
for column in self.persist_selectable.columns:
AttributeError: 'tuple' object has no attribute 'columns'