首页 > 解决方案 > 如何在烧瓶中复制 sqlalchemy 模型

问题描述

我正在尝试创建一种在烧瓶中复制 sqlalchemy 模型的机制。为此,我正在运行以下逻辑:

class Model:
      primitive_type = (int, bool, float, str)
      def copy(self):
          copy = type(self)()
          for key, val in self.__dict__.items():
              if not key.startswith('_') and isinstance(val, Model.primitive_type):
                 copy.__setattr__(key, val)
          return copy

然后我有一个名为 sensor 的模型,它是一个抽象模型:

class Sensor(db.Model):
     __tablename__ = 'sensor'

     id = db.Column(db.Integer, primary_key=True)
     device_id = db.Column(db.Integer, db.ForeignKey('device.id'))
     type = db.Column(db.String(128), nullable=False)

     __mapper_args__ = {
         'polymorphic_identity': 'sensor',
         'polymorphic_on': type
     }

最后我有传感器本身,它既来自Model又来自Sensor

class Pnt(Model, Sensor):
     __tablename__ = 'pnt'

     id = db.Column(db.Integer, db.ForeignKey('sensor.id'), primary_key=True)
     host_ip = db.Column(db.String(100), nullable=False, info={'label': "Ip"})
     ...
     def copy(self):
         copy = super().copy()
         return copy

问题是 super().copy() 从 Sensor 而不是 Pnt 返回值。此方法不仅在这种情况下有效。任何帮助,将不胜感激。

标签: pythonflaskflask-sqlalchemy

解决方案


推荐阅读