@@ -142,6 +142,7 @@ def write_points(self,
142142 def query (self ,
143143 query ,
144144 params = None ,
145+ bind_params = None ,
145146 epoch = None ,
146147 expected_response_code = 200 ,
147148 database = None ,
@@ -153,8 +154,18 @@ def query(self,
153154 """
154155 Query data into a DataFrame.
155156
157+ .. danger::
158+ In order to avoid injection vulnerabilities (similar to `SQL
159+ injection <https://www.owasp.org/index.php/SQL_Injection>`_
160+ vulnerabilities), do not directly include untrusted data into the
161+ ``query`` parameter, use ``bind_params`` instead.
162+
156163 :param query: the actual query string
157164 :param params: additional parameters for the request, defaults to {}
165+ :param bind_params: bind parameters for the query:
166+ any variable in the query written as ``'$var_name'`` will be
167+ replaced with ``bind_params['var_name']``. Only works in the
168+ ``WHERE`` clause and takes precedence over ``params['params']``
158169 :param epoch: response timestamps to be in epoch format either 'h',
159170 'm', 's', 'ms', 'u', or 'ns',defaults to `None` which is
160171 RFC3339 UTC format with nanosecond precision
@@ -172,6 +183,7 @@ def query(self,
172183 :rtype: :class:`~.ResultSet`
173184 """
174185 query_args = dict (params = params ,
186+ bind_params = bind_params ,
175187 epoch = epoch ,
176188 expected_response_code = expected_response_code ,
177189 raise_errors = raise_errors ,
0 commit comments