【发布时间】:2012-02-25 20:15:28
【问题描述】:
我刚开始在烧瓶中使用 Flask 和 SQLAlchemy。
所以我有一个多对多关系使用这里的例子http://docs.sqlalchemy.org/en/latest/orm/tutorial.html 如果您向下滚动到关于关键字和标签的部分,这就是我正在做的事情。 到目前为止,我能够插入与我的帖子相关的新关键字,并且我正在使用 append。我知道这是错的。所以会发生的是,下一次在博客文章中出现非唯一关键字时,它会抛出关于 Conflict with Keyword 的错误(因为关键字应该是唯一的)
我知道正确的方法是另外一回事,我只是不知道是什么。我看过一个例子 get_or_create(keyword) 基本上按关键字过滤,如果找不到,则添加它。但是我相信随着数据量的增长,这也是错误的。 (每次保存都需要多次调用)。我喜欢 SQLAlchemy 自动进行多次插入的方式。我希望保留它,但要避免这个重复的密钥问题。
编辑:找到解决方案,SQLAlchemy 文档会引导您出错,但解释就在那里。我已经添加了答案。
【问题讨论】:
-
顺便说一句,我正在为相关模型使用附加。像这样。 post.keywords.append(Keyword("foo")) 然后调用 commit.
-
你能发布你的模型并添加一些真实的代码吗?
-
我更新了帖子。我已经尝试过像 merge() 这样的东西,它显然不会做任何事情并且什么也不做。第二个页面加载总是会导致错误。我只想将不存在的游戏(标签)添加到游戏表和用户游戏(如果不存在)。当然,我不能有一个在用户游戏中的游戏,但不是游戏。那部分没问题。我收到 Game() 的重复错误
标签: python many-to-many sqlalchemy bulkinsert flask