I have a Flask (v0.10.1) application using Flask-SQLAlchemy (v2.0) and I\'m trying to configure Pylint to check it. Running with Python 3.4.2.
First error was:
After a lot of investigation I was not able to make Pylint to understand this member, so I just added query
to the generated-members
list and the check is ignored.
It's not a perfect solution but it works.
--load-plugins pylint-flask
--load-plugins
needs the name of the python package to be imported. You can check this on command line (will get ImportError) if you do so. Pylinting in VS Code is nastier since you will not get any visible errors. Instead, you will have zero linting errors even if your code would have some linting problems.pylint-flask is a good plugin, but it is not even meant to tackle this problem! You can see the source code for yourself. There is no mentions about Flask-SQLAlchemy; it is only designed to fix issues (false positives) with Flask.
The pylint-flask-sqlalchemy was created to fix the pylint false positives with Flask-SQLAlchemy. After installing with
pip install pylint-flask-sqlalchemy
one should add it with1
# NOT: "pylint-flask-sqlalchemy"
"python.linting.pylintArgs": ["--load-plugins", "pylint_flask_sqlalchemy"]
1Applies directly only for VS Code. With other IDEs or command line, use the same arguments in the same order.
If used together, for some reason
"python.linting.pylintArgs": ["--load-plugins", "pylint_flask", "pylint_flask_sqlalchemy"]
will not work but
"python.linting.pylintArgs": ["--load-plugins", "pylint_flask_sqlalchemy", "pylint_flask"]
does. So, presumably, the pylint-flask must be loaded after pylint-flask-sqlalchemy.
Another alternative is to add scoped_session
to the list of ignored classes:
# List of class names for which member attributes should not be checked (useful
# for classes with dynamically set attributes). This supports the use of
# qualified names.
ignored-classes=scoped_session
The one that worked for me was switching to flake8 python linter. Below are the steps:
Open VSCode and run Ctrl+Shift+P (for Windows Users)
In the VSCode Search prompt, type Python:Select Linter
. You will see a list of all Linters and select flake8
.
If you do not have flake8
installed as a VScode extension for pylint, it will prompt you to install it. Proceed and install it.
I meet the same issue when using flask_sqlalchemy. my solution is:
pylint --generate-rcfile>~/.config/pylintrc
and then find the
ignored-modules
line, rewrite it to:
ignored-modules=flask_sqlalchemy
all E1101 errors are gone.
Remeber to read the comment:
# List of module names for which member attributes should not be checked
# (useful for modules/projects where namespaces are manipulated during runtime
# and thus existing member attributes cannot be deduced by static analysis. It
# supports qualified module names, as well as Unix pattern matching.
pip install pylint-flask
pip install pylint-flask-sqlalchemy
Load the installed plugin.
For example, if you use VS code, please edit settings.json file as follows:
"python.linting.pylintArgs": ["--load-plugins", "pylint_flask_sqlalchemy", "pylint_flask"]
If having other warnings, define remaining members in generated-members
in pylintrc
file.