2012-02-05 1 views
2

이 아닌은 Oracle 데이터베이스를 쿼리 할 때 Oracle Number 필드를 Decimal로 변환하도록 어떻게 지정합니까?Oracle DB를 사용하는 SqlAlchemy에서 10 진수로 자동 변환하지 않음

저는 SqlAlchemy를 사용하여 수작업으로 작성된 SQL 문을 포함하는 코드를 대체하려고합니다. 많은 쿼리를 통해 데이터베이스에서 500 열의 Numbers를 얻을 수 있습니다. 풀링 된 연결을 사용하는 SQL 연금술 버전은 Decimal 로의 변환 때문에 거의 10 배 더 느립니다.

>>> engine = sqlalchemy.create_engine("oracle+cx_oracle://"+connString) 
>>> conn = engine.pool.connect() 
>>> cursor = conn.cursor() 
>>> cursor.execute("""SELECT * FROM MY_TABLE""") 
>>> r = cursor.fetchone() 
>>> r[-1] 
Decimal('0.878935370620606') 

어떻게하면 10 진수로 변환하지 않겠습니까? (이전 코드는 소수를 사용하지 않으므로 정밀도의 손실은 중요하지 않습니다 .10의 감속비가 중요합니다.)

+1

'engine.dialect.supports_native_decimal'을'False'로 설정하려고 시도했지만 작동하지 않습니다. 나는 SqlAlchemy가 변환 함수를 미리 계산하고 있다고 생각합니다. – AFoglia

답변

0

또한 SqlAlchemy 목록에서이 질문을했고 good answer을 받았습니다. 방법은 없었지만 개발자가 신속하게 추가했습니다. 또한 그는 표준 라이브러리 십진수 모듈을 훨씬 더 빨리 대체 할 수있는 파이썬 라이브러리 cDecimal을 사용할 것을 제안했습니다.

관련 문제