Save pandas (string/object) column as VARCHAR in Oracle DB instead of CLOB (default behaviour)

前端 未结 2 534
情深已故
情深已故 2021-01-18 03:08

i am trying to transfer a dataframe to oracle database, but the transfer is taking too long, because the datatype of the variable is showing as clob in orac

相关标签:
2条回答
  • 2021-01-18 04:04

    use str.zfill

    df['product'].astype(str).str.zfill(9)
    
    0    000012320
    1    000234234
    Name: product, dtype: object
    
    0 讨论(0)
  • 2021-01-18 04:10

    Here is a demo:

    import cx_Oracle
    from sqlalchemy import types, create_engine
    engine = create_engine('oracle://user:password@host_or_scan_address:1521:ORACLE_SID')
    #engine = create_engine('oracle://user:password@host_or_scan_address:1521/ORACLE_SERVICE_NAME')
    
    In [32]: df
    Out[32]:
               c_str  c_int   c_float
    0        aaaaaaa      4  0.046531
    1            bbb      6  0.987804
    2  ccccccccccccc      7  0.931600
    
    In [33]: df.to_sql('test', engine, index_label='id', if_exists='replace')
    

    In Oracle DB:

    SQL> desc test
     Name                Null?    Type
     ------------------- -------- -------------
     ID                           NUMBER(19)
     C_STR                        CLOB
     C_INT                        NUMBER(38)
     C_FLOAT                      FLOAT(126)
    

    now let's specify an SQLAlchemy dtype: 'VARCHAR(max_length_of_C_STR_column)':

    In [41]: df.c_str.str.len().max()
    Out[41]: 13
    
    In [42]: df.to_sql('test', engine, index_label='id', if_exists='replace',
       ....:           dtype={'c_str': types.VARCHAR(df.c_str.str.len().max())})
    

    In Oracle DB:

    SQL> desc test
     Name            Null?    Type
     --------------- -------- -------------------
     ID                       NUMBER(19)
     C_STR                    VARCHAR2(13 CHAR)
     C_INT                    NUMBER(38)
     C_FLOAT                  FLOAT(126)
    

    PS for padding your string with 0's please check @piRSquared's answer

    0 讨论(0)
提交回复
热议问题