Sqlite3“链式”查询

时间:2009-12-12 03:00:26

标签: python sql sqlite

我需要从数据文件创建一个配置文件,如下所示:

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被链接到MAN2MAN2被链接到MANX。在原始文件中,链不那么明显(即,它们是非顺序的)。

我设法读取文件并存储在 Sqlite3 数据库中(我正在使用Python界面)。该表存储有三列:IdParVal;例如,Id='MAN1'Par='RX'Val='123.45'

我有兴趣查询这样的数据库以获取与'n'腿相关的信息。在英语中,那将是:

"Select RX,RY,RZ for the next five legs starting on MAN1"

因此,查询将转到MAN1,检索RXRYRZ,然后阅读参数NEXT并转到{{1} },检索IdRXRY;阅读参数RZ;去那个...好像这五次。

如何使用“动态参数”传递此类查询?

谢谢。

2 个答案:

答案 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)指向上述解决方法。