gpt4 book ai didi

sqlalchemy.orm.exc.StaleDataError : DELETE statement on table 'library_category_items' expected to delete 1 row(s); Only 2 were matched

转载 作者:行者123 更新时间:2023-12-02 11:17:20 34 4
gpt4 key购买 nike

我有两张 table 。一种称为书籍,一种称为 library_categories。现在我想将书籍排序到 library_categories 中,条件是一本书可以属于多个图书馆类别。
这是我的书

class Books(db.Model):

book_id = db.Column(db.String(1000), primary_key=True)
price = db.Column(db.String(1000))

def __repr__(self):
return '<Books %r>' % (self.arxiv_id)

这是我的图书馆类别
class Library_category(db.Model):

id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
name = db.Column(db.String(1000))

def __repr__(self):
return '<Library_category %r>' % (self.id)

任何用户都可以在其中创建类别。现在我想链接图书馆类别和书籍,我通过一个表格来做到这一点
library_category_items = db.Table('library_category_items',
db.Column('books_book_id', db.String(1000), db.ForeignKey('books.book_id')),
db.Column('library_category_id', db.Integer, db.ForeignKey('library_category.id'))
)

这一切似乎都很好,但是当我想从这个表中删除一本书时,我得到了两个类别
sqlalchemy.orm.exc.StaleDataError: DELETE statement on table 'library_category_items' expected to delete 1 row(s); Only 2 were matched.

删除是这样完成的
users = models.User.query.all()
for user in users:
for category in user.library_categories.all():
for book in category.items:
category.items.remove(book)
db.session.delete(category)
db.session.commit()

我的用户模型具有属性 library_categories ,它给出了这个用户的所有类别,而 items 是一个类别的属性,它给出了该类别中的所有书籍。这些关系定义为
user = db.relationship("User", backref=db.backref('library_categories', lazy='dynamic'))
items = db.relationship('Books', secondary=library_category_items, backref=db.backref('library_categories', lazy='dynamic'))

(这些是在 library_category 中定义的)

知道我做错了什么吗?
谢谢
卡尔

编辑:
如果我阻止删除类别的项目,我都可以使它工作
viewonly=True,


items = db.relationship('Books', viewonly=True, secondary=library_category_items, backref=db.backref('library_categories', lazy='dynamic'))

但是,sql-alchemy 将重用表的 id,因此可能会创建一个新类别,其中包含来自旧(已删除)类别的条目......有人知道更好的解决方案吗?有没有办法防止 sqlalchemy 多次使用相同的 id?

最佳答案

您看到此错误的原因是您在 library_category_items 表和 category.items.remove(book) 中有重复的条目。期待一个。您需要找出为什么将同一行两次输入数据库并阻止它。

关于sqlalchemy.orm.exc.StaleDataError : DELETE statement on table 'library_category_items' expected to delete 1 row(s); Only 2 were matched,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34389032/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com