Как я могу вставить строку в таблицу sqlalchemy объект? - PullRequest
0 голосов
/ 30 мая 2019

У меня есть табличный объект, имя которого - теги, и я не знаю, как вставить в него новую строку

это мой объект таблицы:

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

Ответы [ 2 ]

0 голосов
/ 31 мая 2019

Отношение «многие ко многим» добавляет таблицу ассоциации между двумя классами.

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

Чтение это для получения дополнительной информации.

0 голосов
/ 30 мая 2019

Я рекомендую вам использовать подход 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, у них есть отличные документы, рецепты и примеры!

...