代码之家  ›  专栏  ›  技术社区  ›  Matthew Moisen

SQLAlchemy和Oracle-如何让VARCHAR2列使用BYTE而不是CHAR?

  •  0
  • Matthew Moisen  · 技术社区  · 9 年前

    VARCHAR2 列作为 CHAR .我如何使用创建它 BYTE

    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
    )
    
    1 回复  |  直到 7 年前
        1
  •  4
  •   Ilja Everilä    7 年前

    幸亏 Mike Bayer :

    from sqlalchemy.ext.compiler import compiles
    
    
    class VARCHAR2Byte(String):
        pass
    
    
    @compiles(VARCHAR2Byte)
    def compile_varchar2_byte(type_, compiler, **kw):
        len = type_.length
        return 'VARCHAR2(%i BYTE)' % len