如何使用BINARY_DOUBLE类型列

时间:2018-03-23 13:06:55

标签: python oracle python-3.x sqlalchemy

我试图将现有的oracle数据库反映到sqlalchemy元数据中:

from sqlalchemy import create_engine
from sqlalchemy import MetaData
from sqlalchemy import Table

db_uri = 'oracle://USER:PASS@MYDBTNSNAME'
engine = create_engine(db_uri)

# create a MetaData instance
metadata = MetaData()

# reflect db schema to MetaData
metadata.reflect(bind=engine)

返回以下内容:

SAWarning: Did not recognize type 'BINARY_DOUBLE' of column 'column_1'(coltype, colname))

我尝试使用

从方言oracle导入本机类型和类型
from sqlalchemy.types import *
from sqlalchemy.dialects.oracle import *

但它似乎无法识别BINARY_DOUBLE类型

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-13-b69d481f6a4e> in <module>()
      1 from sqlalchemy.types import *
----> 2 from sqlalchemy.dialects.oracle import *

AttributeError: module 'sqlalchemy.dialects.oracle' has no attribute 'BINARY_DOUBLE'

我正在使用SQLAlchemy,版本&#39; 1.2.1&#39;

3 个答案:

答案 0 :(得分:1)

您是否尝试覆盖数据库中的默认映射relfection?像这样

from sqlalchemy.dialects.oracle.base import BINARY_DOUBLE

group_table = sa.Table('groups', metadata,
    sa.Column('your_column', BINARY_DOUBLE(asdecimal=True)),
    autoload=True,
    include_columns=[
    'your_column',
    '...'
    ],
)

或者只是从BINARY_DOBULE

导入sqlalchemy.dialects.oracle.base

我会在评论中提出这个问题,但我刚加入时我不能这样做。

答案 1 :(得分:0)

您正在尝试使用sqlalchemy / DB驱动程序不支持的列类型。所以避免使用那种类型。

创建一个视图(粗略地)SELECT * FROM base_table,并将二进制双列转换为更方便的数字类型。然后反映视图。

答案 2 :(得分:0)

如sqlalchemy changelog中所述,此功能已包含在1.2.8版中:

[oracle] [bug] Added reflection capabilities for the oracle.BINARY_FLOAT, oracle.BINARY_DOUBLE datatypes

我已经使用1.2.18版本对其进行了检查,现在反射工作了。