0
它看起來像SQLAlchemy默認爲創建VARCHAR2
列作爲CHAR
。我怎樣才能用來創造它呢?SQLAlchemy和Oracle - 如何讓VARCHAR2列使用BYTE而不是CHAR?
from sqlalchemy import MetaData, Column, String from sqlalchemy.ext.declarative import declarative_base metadata = MetaData() Base = declarative_base(metadata=metadata) class Foo(Base): __tablename__ = 'foo' name = Column(String(10), primary_key=True) Foo.__table__.create(bind=engine)
這將創建如下表:
CREATE TABLE XXMD.FOO ( NAME VARCHAR2(10 CHAR) NOT NULL )
相反,我想它創建以下文件:
CREATE TABLE XXMD.FOO ( NAME VARCHAR2(10 BYTE) NOT NULL )
出的好奇心:爲什麼?這似乎是一個混淆的來源,因爲String(10)是一個泛型類型,它使用最合適的DB類型將最長爲10的Python字符串映射到SQL。 –
@IljaEverilä我有另一個系統,我不幸使用'BYTE'而不是'CHAR'。此外,'BYTE'是Oracle中使用的默認類型(如果沒有指定),所以我認爲'SQLAlchemy'會支持它。 –
看看Oracle方言如何處理varchar,沒有辦法明確定義BYTE:https://github.com/zzzeek/sqlalchemy/blob/master/lib/sqlalchemy/dialects/oracle/base.py#L592,禁止你創建您自己的SQLA類型。 –