我正在尝试将数据从数据库移至熊猫数据框。我有多个要合并的表中的数据。
我正在使用SQLAlchemy以及父母/孩子之间的关系。
在尝试使用SQLAlchemy之前,我试图了解如何在SQL中完成此操作
我正在使用Sqlite作为数据库。
import sphinx.cmd.make_mode as sphinx_build
OUT_DIR = "docs" # here you have your conf.py etc
build_output = os.path.join(OUT_DIR, "_build")
# build HTML (same as `make html`)
build_html_args = ["html", OUT_DIR, build_output]
sphinx_build.run_make_mode(args=build_html_args)
# build PDF latex (same as `make latexpdf`)
build_pdf_args = ["latexpdf", OUT_DIR, build_output]
sphinx_build.run_make_mode(args=build_pdf_args)
我想编写一个查询,查询结果将是连续conf.py
(id:1)的所有内容。
parent_table
ID | Name | Class
1 | Joe | Paladin
2 | Ron | Mage
3 | Sara | Knight
child1
ID | distance | finished | parent_id
1 | 2 miles | yes | 1
2 | 3 miles | yes | 1
3 | 1 miles | yes | 1
4 | 10 miles | no | 2
child2
ID | Weight | height | parent_id
1 | 5 lbs | 5'3 | 1
2 | 10 lbs | 5'5 | 2
我猜我需要进行连接,但是对Joe
的{{1}}条目较少的事实感到困惑。
当1 | Joe | Paladin | 2 miles | yes | 3 miles | yes | 1 miles | yes | 5lbs | 5'3
2 | Ron | Mage | 10 miles | no | None | None | None | None | 10lbs | 5'5
3 | Sara | Knight | None | None | None | None | None | None | None | None
中的某些行没有太多子级时,我该如何构造一个表,该表具有所需的列数,并用Ron
填充空列?
答案 0 :(得分:0)
只需自己搜索每个人,然后使用工会即可加入:
SELECT Name,Class FROM parent_table WHERE ID = 1
UNION
SELECT distance,finished FROM child1 WHERE parent_id = 1
UNION
SELECT weight,height FROM child2 WHERE parent_id =1
这样,您可以避免Ron或表中没有寄存器的任何人的问题,
答案 1 :(得分:0)
您不能有“所需的列数”,因为子行数是可变的,并且列数也不能变化。如果您可以算出一定数量的孩子(例如2),则可以执行以下操作:
CREATE TABLE
"some_table"
AS
SELECT
"parent_table"."ID",
"parent_table"."Name",
"parent_table"."Class",
"child1_1"."finished" AS "2_miles",
"child1_2"."finished" AS "3_miles"
FROM
"parent_table",
"child1" AS "child1_1",
"child1" AS "child1_2"
WHERE
"child1_1"."parent_id"="parent_table"."id" AND
"child1_2"."parent_id"="parent_table"."id" AND
"child1_1"."distance"='2 miles' AND
"child1_2"."distance"='3 miles'
您可以用相同的方式添加child2中的列。子子键(即child1.distance
中的数据)将需要转到列名。但是对于可变的一对多关系,您需要多个表。关系概念基本上就是这些。
对于数据分析(您似乎正在尝试做),您还将需要两个数据集(如表格),因为这两个测量值(样本集)不相关(例如,距离和权重),您可以从中获得2张桌子。考虑一下什么是“样本”(测量结果)。它不能是“实体1完成2英里4磅”,因为“ 2英里4磅”这不是可衡量的事件。因此,您有2个不同的样本:“实体1完成2英里”和“实体1完成4磅”。 (还是parent_table
中实体的child2 1-to-1属性中的数据?您应该更好地详细说明数据的含义以及您要实现的目标)。