使用SQLAlchemy加载现有的多对多表关系
我正在使用SqlAlchemy来和一个已经存在的PostgreSQL数据库进行交互。
我需要访问一些以多对多关系组织的数据。文档里有关于如何创建关系的说明,但我找不到一个关于如何整洁地加载和查询已有关系的例子。
1 个回答
1
查询一个已经存在的关系,其实和创建一个新的关系没什么区别。你基本上写的代码是一样的,只不过需要指定已经存在的表和列的名字,当然你也不需要用SQLAlchemy来发出CREATE TABLE
的命令。
你可以查看这个链接:http://www.sqlalchemy.org/docs/05/mappers.html#many-to-many。你只需要像例子中那样,指定你现有的父表、子表和关联表的外键列,并设置autoload=True
来自动填充其他字段。如果你的关联表存储了额外的信息(几乎总是这样),你应该把多对多的关系拆分成两个一对多的关系。
我是在使用MySQL的时候学会了SQLAlchemy。在那个数据库中,我总是需要指定外键关系,因为它们不是明确的数据库约束。你可能会很幸运,能够从数据库中反射出更多的内容,但你也可以选择使用像http://pypi.python.org/pypi/sqlautocode这样的工具,直接编写整个数据库的结构,避免反射带来的延迟。