sqlalchemy:如何组织创建类的新实例?

2024-10-05 10:11:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个运行sqlalachemy的Flask应用程序。我对炼金术很陌生,所以我真的很困惑。我上了很多课:

用户 课程 讲座 注意 排队 资产

所有这些都有关系-用户有许多课程,课程有许多用户,用户有许多讲座,讲座有许多用户,用户有许多笔记,笔记有许多用户,课程有许多讲座,讲座有许多笔记,课程有许多笔记,讲座有一个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

这给我的印象是可笑的复杂和混乱。除了让人困惑之外,我甚至不知道我是否涵盖了我应该建立的所有关系(很容易忘记一个有那么多的关系)。你知道吗

当一个新对象绑定到许多其他具有各种关系的对象时,必须有更好的方法来添加它。你知道吗

我怎样才能更有条理?你知道吗


Tags: to用户adddb关系队列session课程
1条回答
网友
1楼 · 发布于 2024-10-05 10:11:58

因为这是一个复杂的数据库模式,所以我仔细检查了每个关系并确保它被正确指定。你知道吗

在检查我的模式时,我发现在实例化对象时可以实现一些关系,这是减少代码混乱的最佳方法。你知道吗

我上面的例子是这样写的:

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

相关问题 更多 >

    热门问题