私はFlaskとFlaskに基づくWebサイトで作業しています-MySQLを使用したSQLAlchemy。フィードがいくつかあり、各フィードにはいくつかのデータがありますが、関数が必要です。
最初は、MySQL-python(raw SQLを使用)を使用してデータを保存しました。フィードはプラグインシステム上にあるため、各フィードはupdate()関数をオーバーライドしてデータをインポートします。
ここで、Flask-SQLAlchemyを使用するように変更し、SQLAlchemy ORMに役立つFeedモデルをデータベースに追加しましたが、update()
関数の処理方法に固執していますか?
- プラグインシステムをデータベースモデルと並行して維持しますが、それは実用的ではない/効果がないと思います。
- モデルクラスを拡張します。それが可能かどうかはわかりません。たとえば、FeedOne(Feed)はitem(name = "one")のみを表します。
- ステートメント
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()
。