这是我想要的一个例子。我有一个id,我希望select *
id和所有它的父亲。有可能吗?
cn.Execute("create table if not exists Link( id INTEGER PRIMARY KEY AUTOINCREMENT , `parent` INT , `val` INT NOT NULL , FOREIGN KEY (parent) REFERENCES Link(id));", new { });
cn.Execute("insert into Link(val) values(3)");
cn.Execute("insert into Link(parent, val) values(last_insert_rowid(), 5)");
cn.Execute("insert into Link(parent, val) values(last_insert_rowid(), 9)");
var id = cn.Query<long>("select last_insert_rowid()", new{});
cn.Execute("insert into Link(parent, val) values(last_insert_rowid(), 8)");
cn.Execute("insert into Link(val) values(4)");
答案 0 :(得分:0)
递归sql函数可能会有所帮助。我遇到了这个非常具体的需求,并且感谢我使用SQLAlchemy(ORM),我用以下的方式实现了这个目标:
class Link(Base):
def parents(self):
# print self.parent
# print self.parent_id
if not self.parent:
return None
else:
return self.parent, self.parent.parents
返回中的嵌套tuple
必须展平。
PS:AFAIK只有PostgreSQL提供了递归查询的功能,我猜这是需要的。