How to change sqlalchemy Oracle dialect use upper case for case insensitive?

Question:

I mean, at least uppercase column names in selected result.

I have an Oracle database and a lot of legacy documents/sql.

All column name in these documents are uppercase.

I want to write a new python project and use the documents as reference, but column name in sqlalchemy is all lower case and case a lot of problem.

Is there any way to get uppercase column names in result.keys()?

Asked By: PaleNeutron

||

Answers:

After reading the source code I found a way, writing my own dialect to get case insensitive.

class MyOracleIdentifierPreparer(OracleIdentifierPreparer):

    def _requires_quotes(self, value):
        """Return True if the given identifier requires quoting."""
        lc_value = value.lower()
        legal_characters = re.compile(r"^[A-Z0-9_$.]+$", re.I)
        # uc_value = value.upper()
        return (
            lc_value in self.reserved_words
            or value[0] in self.illegal_initial_characters
            or not legal_characters.match(str(value))
            # remove check of case!
            # or ((lc_value != value) and (uc_value != value)) 
        )


class NoCaseDialect(oracle.dialect):
    """replace preparer"""

    preparer = MyOracleIdentifierPreparer
    supports_statement_cache = True
    # requires_name_normalize = False

Answered By: PaleNeutron
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.