0

sqlalachemyを実行しているFlaskアプリケーションがあります。私はsqlalchemyにかなり慣れていないので、本当に混乱しています。私はたくさんのクラスを作りました:

ユーザーコース講義ノートキューアセット

すべてに関係があります-ユーザーには多くのコースがあり、コースには多くのユーザーがあり、ユーザーには多くの講義があり、講義には多くのユーザーがあり、ユーザーには多くのメモがあり、メモには多くのユーザーがあり、コースには多くの講義があり、講義には多くのメモがあり、コースには多くのメモがあります、講義には1対1のキューがあり、ユーザーは多くのキューを持つことができ、キューには多くのユーザーが必要です。

それで、私が講義を作成するときはいつでも、それに関連する他のすべてのものでそれをインスタンス化する必要がありますか?

たとえば、これは私が新しい講義をするために書いたコードです

def createLecture(user, course):
    # user and course are existing objects fetched from the db already
    # create new lecture
    newLecture = Lecture()
    db.session.add(newLecture)

    # add lecture to course, add new queue to lecture, add user to queue, add user to lecture
    course.lectures.append(newLecture)
    lecture.users.append(user)
    newQueue = Queue()
    db.session.add(newQueue)
    newQueue.users.append(user)
    newQueue.lecture = newLecture
    db.session.commit()

    return newLecture

これは、途方もなく複雑で混乱しているように私を襲います。紛らわしいことに加えて、私が作るべきすべての関係をカバーしたかどうかさえわかりません(非常に多くの関係を忘れがちです)。

さまざまな関係を持つ他の多くのオブジェクトに関連付けられている場合、新しいオブジェクトを追加するためのより良い方法が必要です。

どうすればもっと整理できますか?

4

1 に答える 1

0

これは複雑なデータベーススキーマであったため、すべての関係を再確認し、正しく指定されていることを確認しました。

スキーマを調べたところ、オブジェクトがインスタンス化されたときにいくつかの関係が満たされる可能性があり、それがコードの混乱を減らすための最良の方法であることがわかりました。

したがって、上記の私の例は次のように書かれています。

def createLecture(user, course):
# create new lecture
now = datetime.now()
dt = now.strftime("%Y-%m-%d-%H-%M")
newLecture = Lecture(dt, course)
db.session.add(newLecture)

# add lecture to course, add new queue to lecture, add user to queue, add new user to lecture
newQueue = Queue(newLecture)
db.session.add(newQueue)
newLecture.users.append(user)
newQueue.users.append(user)
newLecture.groupID = pad.createGroupIfNotExistsFor(newLecture.course.name+dt)['groupID']

db.session.commit()
return newLecture
于 2013-01-16T04:18:37.343 に答える