python 我如何插入行到表sqlalchemy对象?

wr98u20j  于 2023-01-29  发布在  Python
关注(0)|答案(3)|浏览(151)

我有一个名称为tags表对象,但我不知道如何向其中插入新行
这是我的表对象:

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
q9rjltbz

q9rjltbz1#

我鼓励您使用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, ForeignKey('tags.id'), primary_key=True)
    post_id = Column(Integer, ForeignKey('posts.id'), primary_key=True)

session.add(Tags(tag_id=1, post_id=2))
session.commit()

检查SQLAlchemy网站,他们有很棒的文档,食谱和例子!

vnzz0bqm

vnzz0bqm2#

对于所述问题的实际答案,您需要从表中获取一个Insert对象:

ins = tags.insert().values(post_id=1, tag_id=2)
db.engine.execute(ins)
wn9m85ua

wn9m85ua3#

多对多关系在两个模型之间添加关联表。

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()

阅读此文章了解更多信息。

相关问题