我有一个表对象,它的名称是标签,我不知道如何在其中插入新行
这是我的表格对象:
tags = db.Table('tags',
db.Column('tag_id', db.Integer, db.ForeignKey('tag.id'), primary_key=True),
db.Column('Post_id', db.Integer, db.ForeignKey('post.id'), primary_key=True)
)
我尝试使用此查询进行测试:
db.session.add(tags(
post_id = 1,
tag_id = 2
))
但是我遇到了这个错误:
TypeError: 'Table' object is not callable
答案 0 :(得分:4)
An actual answer对于所述问题,您需要从表中获取Insert
对象:
ins = tags.insert().values(post_id=1, tag_id=2)
db.engine.execute(ins)
答案 1 :(得分:0)
我鼓励您使用SQLAlchemy ORM方法。在您的情况下,将是这样的:
from sqlalchemy import Column, ForeignKey, Integer
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Tags(Base):
__tablename__ = 'tags'
tag_id = Column(Integer, primary_key=True)
post_id = Column(Integer, ForeignKey('post.id'))
session.add(Tags(tag_id=1, post_id=2))
session.commit()
您不能在一个表中有两个主键,并且我不建议您显式提供tag_id,因为它是主键,数据库会自行索引新行,从而使以下语句有效session.add(Tags(post_id=2))
请访问SQLAlchemy网站,他们提供了出色的文档,食谱和示例!
答案 2 :(得分:0)
多对多关系在两个类之间添加了一个关联表。
tags = db.Table('tags',
db.Column('tag_id', db.Integer, db.ForeignKey('tag.id'), primary_key=True),
db.Column('page_id', db.Integer, db.ForeignKey('page.id'), primary_key=True)
)
class Page(db.Model):
id = db.Column(db.Integer, primary_key=True)
tags = db.relationship('Tag', secondary=tags, lazy='subquery',
backref=db.backref('pages', lazy=True))
class Tag(db.Model):
id = db.Column(db.Integer, primary_key=True)
现在您可以将数据插入表中了
>>> page = Page()
>>> tag = Tag()
>>> page.tags.append(tag)
>>> db.session.add(page)
>>> db.session.commit()
阅读this了解更多信息。