数据建模,Flask-SQLAlchemy和插件

时间:2013-01-08 21:57:14

标签: python plugins sqlalchemy flask flask-sqlalchemy

我在基于Flask和Flask-SQLAlchemy的网站上使用MySQL。我有一大堆Feed,每个Feed都有一些数据,但它需要一个函数。

首先,我使用MySQL-python(使用原始SQL)来存储数据,并且使用插件系统进行提要,因此每个提要都会覆盖update()函数以按照方式导入数据。

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

  1. 保持插件系统与数据库模型并行,但我认为这是不切实际/无效的。
  2. 扩展模型类,我不确定这是否可行,例如FeedOne(Feed)仅代表商品(名称=“一”)。
  3. 使update()语句使if self.name == ""函数处理所有Feed。
  4. 添加了一些代码位。

    Feed模型:

    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()
    

    每个Feed都会使用自己的类update()

1 个答案:

答案 0 :(得分:0)

扩展类并添加.update()方法就是它应该如何适用于选项2。 我没有看到任何问题(我一直在使用这种编码风格的烧瓶/ sqlalchemy)。

如果您(可以)省略动态惰性属性,您还可以执行以下操作:

self.datapieces.append(new_datapiece)

在Feed的更新功能中。