Python 数据建模、炼金术和插件
我在一个基于Flask和Flask SQLAlchemy与MySQL的网站上工作。我有一些feed,每个feed都有一些数据,但它需要一个函数 起初,我使用MySQL-python(带有原始SQL)来存储数据,feed在插件系统上,因此每个feed都覆盖update()函数,以自己的方式导入数据 现在我改为使用Flask SQLAlchemy,并向数据库中添加了提要模型,因为它有助于SQLAlchemy ORM,但我一直在研究如何处理Python 数据建模、炼金术和插件,python,plugins,sqlalchemy,flask,flask-sqlalchemy,Python,Plugins,Sqlalchemy,Flask,Flask Sqlalchemy,我在一个基于Flask和Flask SQLAlchemy与MySQL的网站上工作。我有一些feed,每个feed都有一些数据,但它需要一个函数 起初,我使用MySQL-python(带有原始SQL)来存储数据,feed在插件系统上,因此每个feed都覆盖update()函数,以自己的方式导入数据 现在我改为使用Flask SQLAlchemy,并向数据库中添加了提要模型,因为它有助于SQLAlchemy ORM,但我一直在研究如何处理update()函数 保持插件系统与数据库模型并行,但我认为这
update()
函数
if self.name==“”
语句,使update()函数处理所有提要
class Feed(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(255))
datapieces = db.relationship('Datapiece', backref = 'feed', lazy = 'dynamic')
update()
函数
def update(self):
data = parsedata(self.data_source)
for item in data.items:
new_datapiece = Datapiece(feed=self.id, name=item.name, value=item.value)
db.session.add(new_datapiece)
db.session.commit()
我希望在方案2中实现的目标是:
for feed in Feed.query.all():
feed.update()
每个提要都将使用自己的类
update()
扩展类并添加.update()方法,这正是选项2的工作方式。
我看不出有任何问题(我一直在使用flask/sqlalchemy的这种编码风格)
如果您(可以)省略dynamic lazy属性,您还可以执行以下操作:
self.datapieces.append(new_datapiece)
在你的订阅源的更新功能中。你能分享一些代码吗,这样我们就可以更好地了解你的
Feed
模型和update()
方法了?@Audrius我在问题中添加了代码位。你到底想要什么还不清楚。但是,如果您试图更新数据库中的现有记录,请不要重新创建它。查询数据库,然后操作结果对象的属性,然后commit()
。另一件让我困惑的事情是你的update()
方法在哪里。这是你模型的一部分吗?@Cfreak我已经这么做了,我发布的代码只是一个简短的示例,谢谢你的建议。现在关于update()
,在我现在使用的选项1中,update()
驻留在插拔系统中,每个提要都有自己的插件覆盖update()
,问题是我不喜欢同时插拔系统和数据库表,因为它们没有紧密连接。我更新了问题,添加了第三个选项和选项2的示例。