Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从SQLAlchemy元数据在MSSQL和Oracle上创建具有不同名称大小写的对象_Python_Sql Server_Oracle_Sqlalchemy - Fatal编程技术网

Python 从SQLAlchemy元数据在MSSQL和Oracle上创建具有不同名称大小写的对象

Python 从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

我需要在MSSQL和Oracle上创建一个SQLALchemy元数据对象。这在SQLAlchemy core中非常简单,请参见下面的示例。但是对象的名称在MSSQL上应该是大小写混合的,在Oracle上应该是默认大小写(全部大写)。它在Oracle上也会混合,这在元数据中的名称混合时是意料之中的。从手工上来说,它很简单,只是有单独的元数据定义,但这会破坏拥有一组元数据的目的。Sqlalchemy是1.3.8,python是3.7.4

"""
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的讨论现已结束。