代码之家  ›  专栏  ›  技术社区  ›  Henrik Poulsen

使用SQLALCHEMY设置Oracle VARCHAR2长度i字节

  •  1
  • Henrik Poulsen  · 技术社区  · 6 年前

    我目前正在使用python和pandas移动一些数据。

    from sqlalchemy.dialects.oracle import VARCHAR2
    
    dtyp = {'COLUMN': VARCHAR2(12)}
    
    df.to_sql(<tableName>, engine.connect(), schema=<schema>, if_exists='replace', index=False, chunksize=1000, dtype=table['dtyp'])
    

    这将在我的目标数据库上创建一个类型为VARCHAR2(12 Char)的列

    如何让sqlalchemy创建VARCHAR类型(12字节)的列?

    通过查看文档,我没有看到可以设置的关于VARCHAR2的明显参数


    class BYTE_VARCHAR2(types.UserDefinedType):
    def __init__(self, precision = 8):
        self.precision = precision
    
    def get_col_spec(self, **kw):
        return "VARCHAR2(%s Byte)" % self.precision
    
    def bind_processor(self, dialect):
        def process(value):
            return value
        return process
    
    def result_processor(self, dialect, coltype):
        def process(value):
            return value
        return process
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   Littlefoot    6 年前

    我不知道您使用的工具,但是-就Oracle而言-您可以指定 CHAR BYTE 创建表时,例如。

    SQL> create table test
      2    (col_1    varchar2  (12 char),
      3     col_2    varchar2  (12 byte)
      4    );
    
    Table created.
    

    看看你是否也能做到。

        2
  •  1
  •   Padders    6 年前

    首先,我不熟悉sqlalchemy,所以如果该框架中存在一个选项,我将不知道它。

    但是,通过设置NLS参数“NLS_length_semantics”,这在oracle数据库会话级别是可以控制的,例如:。

    ALTER SESSION SET nls_length_semantics = BYTE
    

    我希望您能够在创建表之前在会话中执行此语句。