2

私はFlaskとFlaskに基づくWebサイトで作業しています-MySQLを使用したSQLAlchemy。フィードがいくつかあり、各フィードにはいくつかのデータがありますが、関数が必要です。

最初は、MySQL-python(raw SQLを使用)を使用してデータを保存しました。フィードはプラグインシステム上にあるため、各フィードはupdate()関数をオーバーライドしてデータをインポートします。

ここで、Flask-SQLAlchemyを使用するように変更し、SQLAlchemy ORMに役立つFeedモデルをデータベースに追加しましたが、update()関数の処理方法に固執していますか?

  1. プラグインシステムをデータベースモデルと並行して維持しますが、それは実用的ではない/効果がないと思います。
  2. モデルクラスを拡張します。それが可能かどうかはわかりません。たとえば、FeedOne(Feed)はitem(name = "one")のみを表します。
  3. ステートメントupdate()を使用して、関数にすべてのフィードを処理させますif self.name == ""

いくつかのコードビットを追加しました。

フィードモデル:

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

4

1 に答える 1

0

クラスを拡張して .update() メソッドを追加することは、オプション 2 で機能するはずの方法です。問題はありません (フラスコ/sqlalchemy でそのスタイルのコーディングを常に使用しています)。 .

また、動的な遅延属性を (できる) 省略できる場合は、次のようなこともできます。

self.datapieces.append(new_datapiece)

フィードの更新機能で。

于 2013-02-08T09:48:12.203 に答える