Python 查询比五个连接和选择更好*

Python 查询比五个连接和选择更好*,python,sql,sql-server,sqlalchemy,Python,Sql,Sql Server,Sqlalchemy,我正在寻找如何在SQLAlchemy中执行一个看似简单的查询。即使我能在SQL中找到答案,我也能翻译出来,希望如此。下面,我将粘贴一封我发送到SA电子邮件列表的电子邮件,解释问题。本质上,我有五个表,我需要所有表中的所有列和行。问题是,有些表中另一个表中的每条记录都有多条记录,因此总行数很快就会变得庞大 我现在做的是做一个CSV 数据文件。每一行都是我的结果中的一行,或者如果我是 只是从产品中选择。还必须从属性中进行选择 这就是我遇到问题的地方。每个产品可以有多个 属性,每个属性值可以指定给多个

我正在寻找如何在SQLAlchemy中执行一个看似简单的查询。即使我能在SQL中找到答案,我也能翻译出来,希望如此。下面,我将粘贴一封我发送到SA电子邮件列表的电子邮件,解释问题。本质上,我有五个表,我需要所有表中的所有列和行。问题是,有些表中另一个表中的每条记录都有多条记录,因此总行数很快就会变得庞大

我现在做的是做一个CSV 数据文件。每一行都是我的结果中的一行,或者如果我是 只是从产品中选择。还必须从属性中进行选择 这就是我遇到问题的地方。每个产品可以有多个 属性,每个属性值可以指定给多个属性 产品。加入所有内容(使用filter())也给了我机会 许多结果需要有效处理

假设我们有一个ID为001、名称为“widget”和 图片为“images/001.jpg”。这个产品有重量和颜色,但是 这些属性位于AttributeValue表中

属性的工作原理如下:attributeassignments具有 产品ID和属性ID。属性具有属性ID和 属性名称(“颜色”、“大小”等)。AttributeValue有一个 属性ID和值(“蓝色”、“55”等)

对于我们的小部件,属性可能有001001,“大小”;001, 002, “颜色”;001,003,“重量”。001是小部件的产品ID。 属性指定可能有001,001;001, 002; 001, 003. 001是 小部件和第二个数字是不同组件的ID 属性。 属性值可能有001,“1x2x3”;002,“蓝色”;003,“55”

这可能不太合理,但在我的新工作中,我仍然在学习整个系统,所以我可能无法完美地解释这个设置。不过,它是有效的,关系中的任何问题都是我的解释,而不是数据库本身

无论如何,在CSV文件中,我想将这三个属性中的每一个都放在一列下: 001,小部件,图像/001.jpg,蓝色,55,1x2x3

目前,我正在迭代结果。第一行在 循环,我检查当前结果的ID并将其与前一个结果进行比较 一个。如果他们匹配,我假设我的结果相同,所以我得到 行中属性的值。如果两个ID不同,我假设 我做完了。我写出最后一个结果的值,清除 数组用于存储所有值,并获取 这些不是属性

我当前的查询太多了,以至于我的结果太大,无法进行连接 不过,还是要管理好。第一次迭代非常完美,但是我 使用相同的产品ID号卡住。即使我提出这个问题 限制为100000,我从未见过除此之外的任何其他产品ID
一个。它感觉像一个无限循环,但事实并非如此。如何才能做得更好?

这里是一个很好的起点。可能重复的