python - 多对多关系的SQLAlchemy问题
问题描述
我在使用 SQLAlchemy 时遇到问题。
Base = declarative_base()
node_to_node = Table("node_to_node", Base.metadata,
Column("left_node_id", Integer, ForeignKey("node.id"), primary_key=True),
Column("right_node_id", Integer, ForeignKey("node.id"), primary_key=True)
)
class Node(Base):
__tablename__ = 'node'
id = Column(Integer, primary_key=True)
label = Column(String)
right_nodes = relationship("Node",
secondary=node_to_node,
primaryjoin=id==node_to_node.c.left_node_id,
secondaryjoin=id==node_to_node.c.right_node_id,
backref="left_nodes"
)
metadata = Base.metadata
engine = create_engine("postgres+psycopg2://postgres:admin@localhost:5432/test")
Base.metadata.drop_all(engine)
Base.metadata.create_all(engine)
session = sessionmaker()
session.configure(bind=engine)
s = session()
node1 = Node(label="node1")
node2 = Node(label="node2")
node3 = Node(label="node3")
node1.right_nodes.append(node2)
node1.right_nodes.append(node3)
s.add_all([node1, node2, node3])
s.commit()
我想要的是将节点 1 的所有正确节点的 ID 作为一个数组,所以在这里 [2, 3] 你知道一种允许我这样做的方法吗?
提前感谢您的帮助!
编辑 :
class NeedTag(Base):
__tablename__ = 'need_tags'
tag_id = Column(Integer, ForeignKey('tags.id'), primary_key=True)
text_id = Column(Integer, ForeignKey('texts.id'), primary_key=True)
class Text(Base) :
__tablename__ = 'texts'
id = Column(Integer, primary_key=True)
text = Column(Text, nullable=False)
need_tag = relationship("Tag",
secondary="need_tags")
class Tag(Base):
__tablename__ = 'tags'
id = Column(Integer, primary_key=True)
name = Column(String(), nullable=False)
我对 SQL Alchemy 合成器有疑问。例如,我定义了 Text 和 Tags 类以及 Text 和 Tags 之间的多对多关系: 要使用文本,您需要有一些必须存在的标签。
一个条件的例子是: If tag1 or tag2 : If tag3 or tag 4 : Text1 可以使用
我想这样做:
text1.need_tags = [ [tag1, tag2],[tag3, tag4] ]
因此,要使用 text1,您至少需要第一个列表中的 1 个标签和第二个列表中的 1 个标签
但是我尝试了很多技巧,但都失败了
您知道是否可以使用 SQLAlchemy 做到这一点?或者类似的东西完成同样的事情
解决方案
推荐阅读
- python - “ipywidgets 下拉小部件:什么是 onchange 事件?”的基本问题
- react-pdf - 包含 react-pdf 渲染器时的开玩笑错误
- javascript - 让一个项目有条件地出现在另一个组件中
- javascript - 如何在 Node.js/Javascript 中添加新的键值对
- kernel - KMDF windows 驱动程序中的 ibv_post_send 性能优化
- r - 如果连续值出现在组 id 的末尾,则删除
- python - 连接具有相同 ID 的记录的值 | 熊猫
- python - 在 Pandas DataFrame 中将 C 和 D 列附加到 A 和 B
- javascript - 如何将 XMLHttpRequest 响应存储为变量
- react-native - react-native-fbsdk-next 权限未更新