python - 如何在烧瓶中复制 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 返回值。此方法不仅在这种情况下有效。任何帮助,将不胜感激。
解决方案
推荐阅读
- android - Webbrowser 试图在浏览器中打开 PDF 文件而不是 html
- c# - 如何修复 Windows-API-Code-Pack 中的 ArgumentException?
- react-native - 当应用程序处于前台模式时,如何显示 sendbird 推送通知?
- c - 如何树遍历多路树
- php - 需要在数据库中插入单个数据
- r - autoplot 不接受 ts 对象
- linux - 在linux终端计算txt文件中单词的个数
- r - 函数内部的意外赋值
- orientdb - 如何在 gremlin 地图上按计数过滤(OrientDB)
- entity-framework - Linq Join on Lists 生成重复数据列表