将条目附加到现有对象(Relationships):Flask-SQLAlchemy

时间:2017-10-03 08:28:46

标签: python sqlalchemy flask-sqlalchemy

主要问题是我尝试使用append函数,并在调用session.commit()时遇到SQL完整性错误,即使没有重新创建对象也是如此。这是我的情况:

我在Flask SQLAlchemy数据库中有一对多的关系。 它是标签类别关系,标签只属于一个类别,根据定义,类别有许多标签。为了便于说明,标签正在X对象上使用。

在我的Flask模型文件中,我这样做了:

class Category(db.Model):
    __tablename__ = 'category'
    id = db.Column(db.Integer, primary_key = True)
    category = db.Column(db.Text, unique = True)
    tags = db.relationship('Tag', backref = 'category', lazy = 'dynamic')

class Tag(db.Model):
    __tablename__ = 'tags'

    id = db.Column(db.Integer, primary_key = True)
    tag = db.Column(db.Text, unique = True)
    category_id = db.Column(db.Integer, db.ForeignKey('category.id'))

这应该定义一个Category类,我可以使用session.append(Tag)函数“追加”标签。

类别和标签是唯一的,我想从用户那里获取输入,并按用户指定添加类别/标签。在某些情况下,用户可能只想将标记添加到现有类别中。

我接受输入的方式是使用一个表单,我从中接收类别和标记,然后创建对象并将它们添加到数据库(如果它们不存在),如果它们存在,我只想将标签附加到X或类别。

这是我的代码:

category = Category(category = request.form['categories']) #Category related to its respective list of tags

tag_list = request.form.getlist('tags') # tags are received as a list

for tag_entity in tag_list:
    tag = Tag(tag = tag_entity)
    X.tags.append(tag)
    # Checking if the category exists or not in the database
    list1 = []
    if len(db.session.query(Category.tags).filter(Category.category == request.form['categories']).all()) != 0:
        list1 = db.session.query(Category.tags).filter(Category.category == request.form['categories']).all()
    list1.append(tag)
    for entry in list1:
        print entry.tag
    list1 = [entry.tag for entry in list1]
    # Here I should check if the tag already exists as well:
    db.session.add(tag)

# Only add category if it doesn't already exist
if len(db.session.query(Category.id).filter(Category.category == request.form['categories']).all()) == 0:
    print "I'm here"
    db.session.add(Category(category = request.form['categories'], tags = list1))
else:
    print "woops im here"
    newCat = Category(category=request.form['categories'])
    newCat.tags.extend(list1)
    db.session.merge(newCat)

db.session.add(X)
db.session.commit()

我知道我的代码非常混乱,看起来它没有做到它应该做的事情,这是我一次又一次失败的结果。

我的主要问题是我尝试调用category.tags.append(Tag),然后在调用session.commit()时遇到完整性错误,即使甚至没有重新创建类别。

我希望我写的内容有道理,任何帮助都会受到赞赏。

0 个答案:

没有答案