[英]sqlalchemy: how to organize making new instances of classes?
我有一个运行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
这使我感到困惑和困惑。 除了令人困惑之外,我什至不知道我是否涵盖了我应该建立的所有关系(很容易忘记很多关系)。
当新对象与具有各种关系的许多其他对象绑定在一起时,必须有某种更好的方法来添加它。
我怎样才能更有条理?
由于这是一个复杂的数据库架构,因此我仔细检查了每个关系并确保正确指定了它。
在检查架构时,我发现在实例化对象时可以满足某些关系,这是减少代码混乱的最佳方法。
所以我上面的例子写成:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.