【问题标题】:sqlalchemy: how to organize making new instances of classes?sqlalchemy:如何组织制作新的类实例?
【发布时间】:2012-12-30 02:53:25
【问题描述】:

我有一个运行 sqlalachemy 的 Flask 应用程序。我对 sqlalchemy 很陌生,所以我真的很困惑。我做了一堆类:

用户 课程 演讲 笔记 队列 资产

所有这些都有关系-用户有很多课程,课程有很多用户,用户有很多讲座,讲座有很多用户,用户有很多笔记,笔记有很多用户,课程有很多讲座,讲座有很多笔记,课程有很多笔记,讲座有一对一的队列,一个用户可以有很多队列,一个队列需要很多用户,等等

所以每当我创建一个讲座时,我是否也必须在与之相关的所有其他事情中实例化它?

例如,这是我为制作新讲座而编写的代码

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

这让我觉得非常复杂和令人困惑。除了令人困惑之外,我什至不知道我是否涵盖了我应该建立的所有关系(很容易忘记一个有这么多的关系)。

当新对象与具有各种关系的许多其他对象相关联时,必须有更好的方法来添加新对象。

我怎样才能更有条理?

【问题讨论】:

    标签: python sqlalchemy flask relationship


    【解决方案1】:

    由于这是一个复杂的数据库架构,我仔细检查了每一个关系并确保其指定正确。

    在检查我的架构时,我发现在实例化对象时可以满足某些关系,这是减少代码混乱的最佳方法。

    所以我上面的例子写成:

    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-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-17
      • 1970-01-01
      • 2020-06-18
      • 1970-01-01
      • 2020-01-11
      相关资源
      最近更新 更多