max*_*xim 5 python sql-server sqlalchemy
在 Sqlalchemy (0.8.2) 中,我尝试按情况选择案例组, 如下所示:
query = """
SELECT count([HR_PERSONNEL].[S_HR_PERSONNEL_ID]) AS value,
CASE
WHEN (floor(datediff(day, [HR_PERSONNEL].[D_DATE_OF_BIRTH], CURRENT_TIMESTAMP) / 365.25) < 15) THEN 15
WHEN (floor(datediff(day, [HR_PERSONNEL].[D_DATE_OF_BIRTH], CURRENT_TIMESTAMP) / 365.25) BETWEEN 15 AND 19) THEN 19
ELSE 100 END AS anon_1
FROM [HR_PERSONNEL]
GROUP BY CASE
WHEN (floor(datediff(day, [HR_PERSONNEL].[D_DATE_OF_BIRTH], CURRENT_TIMESTAMP) / 365.25) < 15) THEN 15
WHEN (floor(datediff(day, [HR_PERSONNEL].[D_DATE_OF_BIRTH], CURRENT_TIMESTAMP) / 365.25) BETWEEN 15 AND 19) THEN 19
ELSE 100 END"""
Run Code Online (Sandbox Code Playgroud)
纯文本 SQL 查询可以使用 SA 执行,不会出现问题:
>>> for i in mssql_engine.execute(query):
print i
(11, 15)
(1097, 19)
(63878, 100)
Run Code Online (Sandbox Code Playgroud)
但我在 SQLAlchemy ORM 中使用相同的查询时遇到问题:
>>> age_case_groups =case([( floor_function < 15, 15)\
,(between(floor_function,15,19), 19)],else_=100)
>>> vols_by_age = session.query(func.count(HrPersonnel.S_HR_PERSONNEL_ID).label('value'),age_case_groups)\
.group_by(age_case_groups)
>>> vols_by_age.all()
Traceback (most recent call last):
File "<pyshell#43>", line 1, in <module>
vols_by_age.all()
File "build\bdist.win32\egg\sqlalchemy\orm\query.py", line 2104, in all
return list(self)
File "build\bdist.win32\egg\sqlalchemy\orm\query.py", line 2216, in __iter__
return self._execute_and_instances(context)
File "build\bdist.win32\egg\sqlalchemy\orm\query.py", line 2231, in _execute_and_instances
result = conn.execute(querycontext.statement, self._params)
File "build\bdist.win32\egg\sqlalchemy\engine\base.py", line 662, in execute
params)
File "build\bdist.win32\egg\sqlalchemy\engine\base.py", line 761, in _execute_clauseelement
compiled_sql, distilled_params
File "build\bdist.win32\egg\sqlalchemy\engine\base.py", line 874, in _execute_context
context)
File "build\bdist.win32\egg\sqlalchemy\engine\base.py", line 1024, in _handle_dbapi_exception
exc_info
File "build\bdist.win32\egg\sqlalchemy\util\compat.py", line 163, in raise_from_cause
reraise(type(exception), exception, tb=exc_tb)
File "build\bdist.win32\egg\sqlalchemy\engine\base.py", line 867, in _execute_context
context)
File "build\bdist.win32\egg\sqlalchemy\engine\default.py", line 324, in do_execute
cursor.execute(statement, parameters)
Run Code Online (Sandbox Code Playgroud)
编程错误:(ProgrammingError) ('42000',“[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]列 'HR_PERSONNEL.D_DATE_OF_BIRTH' 在选择列表中无效,因为它不包含在聚合函数或GROUP BY 子句。(8120) (SQLExecDirectW); [42000] [Microsoft][ODBC SQL Server Driver][SQL Server]列“HR_PERSONNEL.D_DATE_OF_BIRTH”在选择列表中无效,因为它不包含在聚合函数中或 GROUP BY 子句。(8120); [42000] [Microsoft][ODBC SQL Server Driver][SQL Server]列“HR_PERSONNEL.D_DATE_OF_BIRTH”在选择列表中无效,因为它未包含在聚合函数或GROUP BY 子句。(8120); [42000] [Microsoft][ODBC SQL Server 驱动程序][SQL Server]无法准备语句。(8180)") u'SELECT count([HR_PERSONNEL].[S_HR_PERSONNEL_ID] ) AS 值,CASE WHEN (floor(datediff(day, [HR_PERSONNEL].[D_DATE_OF_BIRTH], CURRENT_TIMESTAMP) / ?) < ?) 那么?何时 (floor(datediff(day, [HR_PERSONNEL].[D_DATE_OF_BIRTH], CURRENT_TIMESTAMP) / ?) 之间?和?) 那么?别的 ?END AS anon_1 \nFROM [HR_PERSONNEL] GROUP BY CASE WHEN (floor(datediff(day, [HR_PERSONNEL].[D_DATE_OF_BIRTH], CURRENT_TIMESTAMP) / ?) < ?) THEN ? 何时 (floor(datediff(day, [HR_PERSONNEL].[D_DATE_OF_BIRTH], CURRENT_TIMESTAMP) / ?) 之间?和?) 那么?别的 ?结束' (365.25, 15, 15, 365.25, 15, 19, 19, 100, 365.25, 15, 15, 365.25, 15, 19, 19, 100)
看起来像是 MSSQL/ODBC 错误???
| 归档时间: |
|
| 查看次数: |
1270 次 |
| 最近记录: |