Identifier to long in Oracle

Issue #3313 closed
Michal Kaczmarek created an issue

Hi, I've got a problem with oracle tables. Identifier is too long, because my tables have long names and column names are also long so when identyfier is created it's more than 30 characters long. Is any posibility to work with that without changing table and column names? Maybe by add param label() on Column()?

Best regards Michał

Comments (5)

  1. Mike Bayer repo owner

    The Oracle dialect has a max ident length of 30 already so there should be no issue.

    Test case:

    from sqlalchemy import *
    from sqlalchemy.orm import *
    from sqlalchemy.ext.declarative import declarative_base
    
    Base = declarative_base()
    
    
    class A(Base):
        __tablename__ = 'a_very_long_table_name'
        very_long_id_column = Column(Integer, primary_key=True)
        very_long_column_x = Column(Integer)
        very_long_column_y = Column(Integer)
    
    e = create_engine("oracle://scott:tiger@xe", echo=True)
    Base.metadata.drop_all(e)
    Base.metadata.create_all(e)
    
    s = Session(e)
    s.add(A(very_long_id_column=1, very_long_column_x=10, very_long_column_y=15))
    s.commit()
    
    for a in s.query(A):
        print(a.very_long_id_column, a.very_long_column_x, a.very_long_column_y)
    

    output, note that the identifiers are truncated to 30:

    CREATE TABLE a_very_long_table_name (
        very_long_id_column INTEGER NOT NULL, 
        very_long_column_x INTEGER, 
        very_long_column_y INTEGER, 
        PRIMARY KEY (very_long_id_column)
    )
    
    
    {}
    COMMIT
    BEGIN (implicit)
    INSERT INTO a_very_long_table_name (very_long_id_column, very_long_column_x, very_long_column_y) VALUES (:very_long_id_column, :very_long_column_x, :very_long_column_y)
    {'very_long_column_y': 15, 'very_long_column_x': 10, 'very_long_id_column': 1}
    COMMIT
    BEGIN (implicit)
    SELECT a_very_long_table_name.very_long_id_column AS a_very_long_table_name_v_1, a_very_long_table_name.very_long_column_x AS a_very_long_table_name_v_2, a_very_long_table_name.very_long_column_y AS a_very_long_table_name_v_3 
    FROM a_very_long_table_name
    {}
    (1, 10, 15)
    

    please provide a full reproducing test case that illustrates your issue, thanks!

  2. Log in to comment