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()
?
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
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()
?
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