Pylint can't find SQLAlchemy query member
Solution
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"]
Optional
If having other warnings, define remaining members in generated-members
in pylintrc
file.
Any class you declare as inheriting from db.Model
won't have query
member until the code runs so Pylint can't detect it.
The workaround for this besides ignoring no-member errors on every query
call is to add query
on the generated-members
list in a Pylint config file since it is a member that will only be created at runtime.
When you run Pylint, it will search for a configuration file as stated in its documentation:
You can specify a configuration file on the command line using the --rcfile option. Otherwise, Pylint searches for a configuration file in the following order and uses the first one it finds:
pylintrc
in the current working directory- If the current working directory is in a Python module, Pylint searches up the hierarchy of Python modules until it finds a pylintrc file. This allows you to specify coding standards on a module-by-module basis. Of course, a directory is judged to be a Python module if it contains an
__init__.py
file- The file named by environment variable
PYLINTRC
- if you have a home directory which isn’t
/root
:
.pylintrc
in your home directory.config/pylintrc
in your home directory/etc/pylintrc
So if you don't have a config and you want a system wide default config for pylint you can use pylint --generate-rcfile > /etc/pylintrc
. This will generate a commented configuration file according to the current configuration (or the default if you don't have one) that you can edit to your preferences.
p.s.: generated-members
on a config file is the right way to deal with this warning, as it's said by the commented config
# List of members which are set dynamically and missed by pylint inference # system, and so shouldn't trigger E0201 when accessed. Python regular # expressions are accepted.
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.