def query(self, query, additional_locals=None, safe_mode=False):
"""Executes the given SQLAlchemy query string.
Args:
query: The SQLAlchemy ORM query (or Python code) to be executed.
additional_locals: Any additional local variables to inject into the execution context when executing
the query.
safe_mode: Boolean value indicating whether or not to execute queries in safe mode only. If True,
this only allows MLAlchemy-style queries. If False, this allows both exec() and MLAlchemy-style
queries. Default: False.
Returns:
The result of executing the query.
"""
logger.debug("Attempting to execute database query: %s" % query)
if safe_mode and not isinstance(query, dict):
raise SafetyViolationError("Queries in safe mode must be MLAlchemy-style queries")
if isinstance(query, dict):
logger.debug("Executing query in safe mode (MLAlchemy)")
return mlalchemy.parse_query(query).to_sqlalchemy(self.session, self.tables).all()
else:
logger.debug("Executing unsafe query (Python exec())")
if additional_locals is not None:
for k, v in iteritems(additional_locals):
locals()[k] = v
exec(
compile(
'result = %s' % query.strip(),
'<string>',
'exec'
),
globals(),
locals()
)
return locals()['result']
评论列表
文章目录