以下代码是一个非常简单的SqlAlchemy ORM实现,其中包含一个简单的表。Mytable类试图从BaseAbstract继承。
代码抛出以下异常:
Message: metaclass冲突:派生类的元类必须是其所有基类的元类(非严格)子类
如果您将类声明行更改为
class Mytable(Base):
代码将正常工作。另外,如果您将
代码抛出以下异常:
Message: metaclass冲突:派生类的元类必须是其所有基类的元类(非严格)子类
from abc import ABC
from sqlalchemy import Column, Integer, create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
class BaseAbstract(ABC):
"""description of class"""
SQLALCHEMY_DATABASE_URI =\
'mssql+pyodbc://(local)/TestDB?driver=SQL+Server+Native+Client+11.0'
SQLALCHEMY_TRACK_MODIFICATIONS = False
engine = create_engine(SQLALCHEMY_DATABASE_URI, echo=True)
Session = sessionmaker(bind=engine)
session = Session()
Base = declarative_base()
metadata = Base.metadata
class Mytable(Base, BaseAbstract):
__tablename__ = 'myTable'
id = Column(Integer, primary_key=True)
firstNum = Column(Integer, nullable=False)
secondNum = Column(Integer, nullable=False)
如果您将类声明行更改为
class Mytable(Base):
代码将正常工作。另外,如果您将
class BaseAbstract(ABC):
更改为 class BaseAbstract(object):
,代码也会正常工作。如何从SQLAlchemy的抽象类继承?
abstractmethod
检查调用签名,例如。 - Ilja Everilä