Skip to main content
 首页 » 编程设计

python之数据建模、Flask-SQLAlchemy 和插件

2025年05月04日9del

我在一个基于 Flask 和 Flask-SQLAlchemy 以及 MySQL 的网站上工作。我有一些提要,每个提要都有一些数据,但它需要一个函数。

起初,我使用 MySQL-python(带有原始 SQL)来存储数据,并且提要是在插件系统上,因此每个提要都会覆盖 update() 函数以按其方式导入数据。

现在我改为使用 Flask-SQLAlchemy 并将 Feed 模型添加到数据库中,因为它有助于 SQLAlchemy ORM,但我仍然不知道如何处理 update() 函数?

  1. 保持插件系统与数据库模型并行,但我认为这是不切实际/无效的。
  2. 扩展模型类,我不确定这是否可行,例如FeedOne(Feed) 将仅代表项目(name="one")。
  3. 使用 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 的那种编码风格)。

如果你(可以)省略动态惰性属性,你也可以这样做:

self.datapieces.append(new_datapiece) 

在您的 Feed 的更新功能中。