Skip to content

Instantly share code, notes, and snippets.

@labeneator
Last active July 27, 2017 16:57
Show Gist options
  • Save labeneator/86e5bf413bd0295efc0a964e551b7197 to your computer and use it in GitHub Desktop.
Save labeneator/86e5bf413bd0295efc0a964e551b7197 to your computer and use it in GitHub Desktop.
# OK
Note the 'MM' parameter to date_trunc
In [65]: qry ="""
SELECT
trunc(employees.hire_date, 'MM') AS "employees.hire_date_monthly",
coalesce(sum(employees.salary), 0) AS "employees.salary_sum"
FROM
employees JOIN departments ON employees.department_id = departments.department_id
GROUP BY trunc(employees.hire_date, 'MM')"""
In [66]: print self.sa_seed_model_query.dbm.engine.execute(qry).fetchone()
(datetime.datetime(2006, 3, 1, 0, 0), 37000)
# Fails
# Note that the parameter is a unicode string: u'MM'
In [67]: qry ="""
SELECT
trunc(employees.hire_date, u'MM') AS "employees.hire_date_monthly",
coalesce(sum(employees.salary), 0) AS "employees.salary_sum"
FROM
employees JOIN departments ON employees.department_id = departments.department_id
GROUP BY trunc(employees.hire_date, u'MM')"""
In [68]: print self.sa_seed_model_query.dbm.engine.execute(qry).fetchone()
---------------------------------------------------------------------------
DatabaseError Traceback (most recent call last)
/usr/share/python/dashboard-api/local/lib/python2.7/site-packages/dashboard_api/angler/query_factory.py in <module>()
----> 1 print self.sa_seed_model_query.dbm.engine.execute(qry).fetchone()
/usr/share/python/dashboard-api/local/lib/python2.7/site-packages/sqlalchemy/engine/base.pyc in execute(self, statement, *multiparams, **params)
2062
2063 connection = self.contextual_connect(close_with_result=True)
-> 2064 return connection.execute(statement, *multiparams, **params)
2065
2066 def scalar(self, statement, *multiparams, **params):
/usr/share/python/dashboard-api/local/lib/python2.7/site-packages/sqlalchemy/engine/base.pyc in execute(self, object, *multiparams, **params)
937 """
938 if isinstance(object, util.string_types[0]):
--> 939 return self._execute_text(object, multiparams, params)
940 try:
941 meth = object._execute_on_connection
/usr/share/python/dashboard-api/local/lib/python2.7/site-packages/sqlalchemy/engine/base.pyc in _execute_text(self, statement, multiparams, params)
1095 statement,
1096 parameters,
-> 1097 statement, parameters
1098 )
1099 if self._has_events or self.engine._has_events:
/usr/share/python/dashboard-api/local/lib/python2.7/site-packages/sqlalchemy/engine/base.pyc in _execute_context(self, dialect, constructor, statement, parameters, *args)
1187 parameters,
1188 cursor,
-> 1189 context)
1190
1191 if self._has_events or self.engine._has_events:
/usr/share/python/dashboard-api/local/lib/python2.7/site-packages/sqlalchemy/engine/base.pyc in _handle_dbapi_exception(self, e, statement, parameters, cursor, context)
1400 util.raise_from_cause(
1401 sqlalchemy_exception,
-> 1402 exc_info
1403 )
1404 else:
/usr/share/python/dashboard-api/local/lib/python2.7/site-packages/sqlalchemy/util/compat.pyc in raise_from_cause(exception, exc_info)
201 exc_type, exc_value, exc_tb = exc_info
202 cause = exc_value if exc_value is not exception else None
--> 203 reraise(type(exception), exception, tb=exc_tb, cause=cause)
204
205 if py3k:
/usr/share/python/dashboard-api/local/lib/python2.7/site-packages/sqlalchemy/engine/base.pyc in _execute_context(self, dialect, constructor, statement, parameters, *args)
1180 statement,
1181 parameters,
-> 1182 context)
1183 except BaseException as e:
1184 self._handle_dbapi_exception(
/usr/share/python/dashboard-api/local/lib/python2.7/site-packages/sqlalchemy/engine/default.pyc in do_execute(self, cursor, statement, parameters, context)
468
469 def do_execute(self, cursor, statement, parameters, context=None):
--> 470 cursor.execute(statement, parameters)
471
472 def do_execute_no_params(self, cursor, statement, context=None):
DatabaseError: (cx_Oracle.DatabaseError) ORA-01899: bad precision specifier
[SQL: '\nSELECT trunc(employees.hire_date, u\'MM\') AS "employees.hire_date_monthly", coalesce(sum(employees.salary), 0) AS "employees.salary_sum" FROM employees JOIN departments ON employees.department_id = departments.department_id GROUP BY trunc(employees.hire_date, u\'MM\')\n']
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment