如何将行插入表sqlalchemy对象?

时间:2019-05-30 14:13:29

标签: python flask sqlalchemy flask-sqlalchemy

我有一个表对象,它的名称是标签,我不知道如何在其中插入新行

这是我的表格对象:

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

3 个答案:

答案 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了解更多信息。