gpt4 book ai didi

python - 以持久的方式为 Python 存储模拟结果?

转载 作者:太空宇宙 更新时间:2023-11-03 23:49:52 24 4
gpt4 key购买 nike

背景:我正在对一组数据进行多次模拟。对于每节课,我都会为学生分配项目。每节课的不同之处在于,我随机安排了学生的顺序,这样所有学生都有机会被分配到他们想要的项目。我在电子表格(即 Excel)中写出一些分配,它基本上看起来像这样(小快照,实际表扩展到几千个 session ,大约 100 个学生)。

|          | Session 1 | Session 2 | Session 3 |
|----------|-----------|-----------|-----------|
|Stu1 |Proj_AA |Proj_AB |Proj_AB |
|----------|-----------|-----------|-----------|
|Stu2 |Proj_AB |Proj_AA |Proj_AC |
|----------|-----------|-----------|-----------|
|Stu3 |Proj_AC |Proj_AC |Proj_AA |
|----------|-----------|-----------|-----------|

现在,处理分配的代码当前将 session 存储在一个对象中。下次运行分配时,对象将被覆盖。

因此我真正想做的是存储所有分配结果。这很重要,因为我稍后需要从数据中获取信息,例如:哪个项目 Stu1 被分配到最多或者 Proj_AC 有多受欢迎(它被分配了多少次被分配/ session 数)。

问题:
我可以使用哪些方法来基本上持久地存储此类 session 信息?基本上,每个 session 输出都需要在结束之后和下一个分配周期开始之前将自己添加到存储库中。

friend 建议的一个解决方案是使用 SQLAlchemy 将这些结果映射到关系数据库。我有点喜欢这个想法,因为这确实让我有机会深入研究数据库。

现在我推荐的数据库结构是:

|----------|-----------|-----------|
|Session |Student |Project |
|----------|-----------|-----------|
|1 |Stu1 |Proj_AA |
|----------|-----------|-----------|
|1 |Stu2 |Proj_AB |
|----------|-----------|-----------|
|1 |Stu3 |Proj_AC |
|----------|-----------|-----------|
|2 |Stu1 |Proj_AB |
|----------|-----------|-----------|
|2 |Stu2 |Proj_AA |
|----------|-----------|-----------|
|2 |Stu3 |Proj_AC |
|----------|-----------|-----------|
|3 |Stu1 |Proj_AB |
|----------|-----------|-----------|
|3 |Stu2 |Proj_AC |
|----------|-----------|-----------|
|3 |Stu3 |Proj_AA |
|----------|-----------|-----------|

在这里,有人建议我将 SessionStudent 列设为组合键。这样我就可以访问特定学生在特定 session 中的特定记录。或者我只能为特定 session 运行整个分配。

问题:
这个想法好吗?
如何使用 SQLAlchemy 实现和查询复合键?
如果没有为特定学生分配项目(如果他想要的所有项目都被采用,数据库会发生什么情况)?在代码中,如果学生没有分配到项目,而不是 proj_id,他只会得到该字段/对象的 None


我很抱歉问了多个问题,但由于这些问题密切相关,我想我会在同一个空间里问他们。


编辑 - 25/03/2010

Student 目前的类结构如下:

class Student(DeptPerson):
def __init__(self, name, stud_id):
super(Student, self).__init__(name, stud_id)
self.preferences = collections.defaultdict(set)
self.allocated_project = None
self.allocated_rank = 0

(Misc.) 它继承自名为 DeptPerson 的类,该类只有 namestud_id

因此,当分配函数将分配的项目(由唯一 ID 引用 - Project 是它自己的类)分配给学生(对于单次运行/试验/ session )时,它将反射(reflect)allocated_project 中的值。如果未为学生分配特定运行的项目(因为其他人已经拥有它,mwhahah...抱歉),allocated_project 保持为 None(这很漂亮对我有用的信息)。

最佳答案

数据的二维展示是一个有两个键的关系数据库表。

在您的示例中,学生 key 和 session key 。

“复合键”是一种您可以忽略的噪音。这没有帮助,也没有必要。复合键并不能很好地解决任何问题,而且会造成很多困难。假装你从未听说过。

我们所做的是引入一个带有简单“标识符”的附加列。这是他们划船的“自动生成的代理键”。为每一行自动生成唯一键是一件好事。复合键是一件坏事。

关于python - 以持久的方式为 Python 存储模拟结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2512609/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com