eve-sqlalchemy
eve-sqlalchemy copied to clipboard
Flask-SQLAlchemy integration does not work.
for example,
db
is a SQLAlchemy instance of flask_sqlalchemy
.
app
is a Flask(name) instance of flask
.
FlaskSQL
class inherits SQL
class of eve_sqlalchemy
and the driver is db
.
at db.init_app(app)
, there are mapping information in db.Model._decl_class_registry.data
.
But driver.Model._decl_class_registry.data
of FlaskSQL instance is empty. So, at line 297 in eve_sqlalchemy/__init__.py
, it said KeyError
because there is no mapping information.
- added
I found out what is wrong. Please do not define
db = flask_sqlalchemy.SQLAlchemy()
ateve_sqlalchemy/__init__.py
. It works when I importdb
fromeve_sqlalchemy/__init__.py
for schema definition like
from eve_sqlalchemy import db
class Hoge(db.Model):
. . .
this code does not match with a tutorial.
thanks
I solved this by overriding the init_app
method of eve_sqlalchemy.SQL
which allows you to specify your own db
as driver
:
from eve import Eve
from eve.io.base import ConnectionException
from eve_sqlalchemy import SQL as _SQL
from eve_sqlalchemy.validation import ValidatorSQL
from my_models import db
class SQL(_SQL):
# https://github.com/pyeve/eve-sqlalchemy/blob/0.5.0/eve_sqlalchemy/__init__.py#L47-L55
def init_app(self, app):
try:
# FIXME: dumb double initialisation of the
# driver because Eve sets it to None in __init__
self.driver = db
self.driver.app = app
self.driver.init_app(app)
except Exception as e:
raise ConnectionException(e)
app = Eve(validator=ValidatorSQL, data=SQL)