gpt4 book ai didi

python - 如何在具有多对多关系的 SQLAlchemy 表中插入数据?

转载 作者:行者123 更新时间:2023-11-28 22:45:45 44 4
gpt4 key购买 nike

我知道存在这个问题。但我请你帮我解决这个例子。我有这个模型:

ItemTable = Table('ItemTable', Base.metadata,
Column('post_id', Integer, ForeignKey('post.id')),
Column('tags_id', Integer, ForeignKey('tag.id')))

class Post(Base):

__tablename__ = 'post'
id = Column(Integer, primary_key = True)
title = Column(Text)
body = Column(Text)
timestamp = Column(DateTime, default=datetime.datetime.utcnow())
user_id = Column(Integer, ForeignKey(User.id))
tags = relationship('Tag', secondary=ItemTable, backref='post')

def __init__(self,title=None,body=None):
self.title = title
self.body = body

def __repr__(self):
return '<Post %r>' % (self.title)

class Tag (Base):
__tablename__ = 'tag'
id = Column (Integer, primary_key = True)
title = Column (Text)
posts = relationship ('Post', secondary=ItemTable, backref='tag')

def __init__(self,title=None):
self.title = title

def __repr__(self):
return '<Tag %r>' % (self.title)

我试图添加一个标签很少的帖子。我怎样才能正确地做到这一点?如果我这样做,我会得到错误:

AttributeError: 'str' object has no attribute '_sa_instance_state'

class AddPost(BaseView):
def is_accessible(self):
return g.user.is_authenticated()
@expose('/', methods=('GET', 'POST'))
def addpost_view(self):
if not g.user.is_authenticated():
return redirect(url_for('AdminView.login_view'))
form = PostForm()
if helpers.validate_form_on_submit(form):
p=Post(title=form.title.data, body=form.text.data)
for tag in form.tags.data.split(','):
p.tags.append(tag)
db_session.add(p)
db_session.commit()
self._template_args['form'] = form
return self.render('admin/addpost.html')

最佳答案

您将字符串附加到 Post 对象而不是 Tag 对象。问题出在这里:

for tag in form.tags.data.split(','):
p.tags.append(tag)

它应该看起来像这样:

for t in form.tags.data.split(','):
tag = Tag(....)
p.tags.append(tag)

关于python - 如何在具有多对多关系的 SQLAlchemy 表中插入数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28236896/

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