我需要从数据文件创建一个配置文件,如下所示:
MAN1_TIME '01-JAN-2010 00:00:00.0000 UTC'
MAN1_RX 123.45
MAN1_RY 123.45
MAN1_RZ 123.45
MAN1_NEXT 'MAN2'
MAN2_TIME '01-MAR-2010 00:00:00.0000 UTC'
MAN2_RX 123.45
[...]
MAN2_NEXT 'MANX'
[...]
MANX_TIME [...]
此文件描述了轨迹的不同“腿”。在这种情况下,MAN1
被链接到MAN2
,MAN2
被链接到MANX
。在原始文件中,链不那么明显(即,它们是非顺序的)。
我设法读取文件并存储在 Sqlite3 数据库中(我正在使用Python界面)。该表存储有三列:Id
,Par
和Val
;例如,Id='MAN1'
,Par='RX'
和Val='123.45'
。
我有兴趣查询这样的数据库以获取与'n'腿相关的信息。在英语中,那将是:
"Select RX,RY,RZ for the next five legs starting on MAN1"
因此,查询将转到MAN1
,检索RX
,RY
,RZ
,然后阅读参数NEXT
并转到{{1} },检索Id
,RX
,RY
;阅读参数RZ
;去那个...好像这五次。
如何使用“动态参数”传递此类查询?
谢谢。
答案 0 :(得分:1)
我在SQLAlchemy website找到了我自己问题的答案。来自文档:
邻接列表模式很常见 表格的关系模式 包含一个外键引用 本身。这是最常见的 表示层次结构的简单方法 平台中的数据。另一种方式是 有时候是“嵌套集”模型 称为“修改预订”。尽管 许多在线文章都说了些什么 修改前序,邻接列表 模型可能是最合适的 绝大多数的模式 分层存储需求 并发的原因,减少了 复杂性,以及修改后的预订 没有什么优势了 可以完全加载的应用程序 子树进入应用程序空间。
SQLAlchemy通常指的是 邻接列表关系 自引用映射器。在这 例如,我们将使用单个 名为treenodes的表代表一个 树结构:
如下图:
root --+---> child1
+---> child2 --+--> subchild1
| +--> subchild2
+---> child3
将用以下数据表示:
id parent_id data
--- ------- ----
1 NULL root
2 1 child1
3 1 child2
4 3 subchild1
5 3 subchild2
6 1 child3
答案 1 :(得分:0)
遵循OMG小马的评论和http://sqllessons.com/categories.html, 也许尝试这样的事情:
select
MAN1.RX as MAN1_RX,
MAN1.RY as MAN1_RY,
MAN1.RZ as MAN1_RZ,
MAN2.RX as MAN2_RX,
MAN2.RY as MAN2_RY,
MAN2.RZ as MAN2_RZ,
MAN3.RX as MAN3_RX,
MAN3.RY as MAN3_RY,
MAN3.RZ as MAN3_RZ,
from table as MAN1
left outer
join table as MAN2
on MAN1.NEXT = MAN2.Id
left outer
join table as MAN3
on MAN3.NEXT = MAN2.Id
where MAN1.Id = 'MAN1'
PS。我对sqlite并不十分熟悉,但假设它没有直接的分层查询语法,那么这个链接(http://www.dbforums.com/mysql/1638233-equivalent-start-connect-mysql.html)指向上述解决方法。