Python 从SQLAlchemy元数据在MSSQL和Oracle上创建具有不同名称大小写的对象
我需要在MSSQL和Oracle上创建一个SQLALchemy元数据对象。这在SQLAlchemy core中非常简单,请参见下面的示例。但是对象的名称在MSSQL上应该是大小写混合的,在Oracle上应该是默认大小写(全部大写)。它在Oracle上也会混合,这在元数据中的名称混合时是意料之中的。从手工上来说,它很简单,只是有单独的元数据定义,但这会破坏拥有一组元数据的目的。Sqlalchemy是1.3.8,python是3.7.4Python 从SQLAlchemy元数据在MSSQL和Oracle上创建具有不同名称大小写的对象,python,sql-server,oracle,sqlalchemy,Python,Sql Server,Oracle,Sqlalchemy,我需要在MSSQL和Oracle上创建一个SQLALchemy元数据对象。这在SQLAlchemy core中非常简单,请参见下面的示例。但是对象的名称在MSSQL上应该是大小写混合的,在Oracle上应该是默认大小写(全部大写)。它在Oracle上也会混合,这在元数据中的名称混合时是意料之中的。从手工上来说,它很简单,只是有单独的元数据定义,但这会破坏拥有一组元数据的目的。Sqlalchemy是1.3.8,python是3.7.4 """ Create from metadata on MSS
"""
Create from metadata on MSSQL and Oracle
"""
import urllib
from sqlalchemy import * # pylint: disable=wildcard-import, unused-wildcard-import
params = urllib.parse.quote_plus(
"Driver={ODBC Driver 17 for SQL Server};Server=xxx\\xxx;Database=xxx;Trusted_Connection=yes"
)
print("mssql+pyodbc:///?odbc_connect=%s" % params)
mssqle = create_engine("mssql+pyodbc:///?odbc_connect=%s" % params, echo=True)
oraclee = create_engine("oracle+cx_oracle://@xxx", echo=True)
metadata = MetaData()
t1 = Table(
"TableNumberOne",
metadata,
Column("id", Integer(), primary_key=True),
Column("ColumnNumberOne", String(50), index=True)
)
metadata.create_all(mssqle)
metadata.create_all(oraclee)
我可以侥幸逃脱。我不确定它是否涵盖了所有可能的情况
for _tab in metadata.sorted_tables:
_tab.name = _tab.name.lower()
for _col in _tab.columns:
_col.name = _col.name.lower()
for _con in _tab.constraints:
if _con.name is not None:
_con.name = _con.name.lower()
for _idx in _tab.indexes:
if _idx.name is not None:
_idx.name = _idx.name.lower()
这一点也正在讨论中。关于github的讨论现已结束。