sqlalchemy FlushError при удалении из таблицы с использованием NULL для первичного ключа - PullRequest
0 голосов
/ 06 июня 2019

Я создаю таблицу в sqlalchemy с несколькими первичными ключами, один из этих ключей обнуляется. При удалении строк из таблицы session.query(Foo).delete() работает, но session.delete(session.query(Foo).first()) выдает FlushError.

Это ожидаемое поведение? Есть ли способ обойти это?

Я включил полный пример ниже. Версия Python 2.7.11 и версия sqlalchemy 1.1.9.

import sqlalchemy as sql
import sqlalchemy.ext.declarative

Base = sqlalchemy.ext.declarative.declarative_base()


class Foo(Base):
    __tablename__ = 'foo'
    foo = sql.Column(sql.String, primary_key=True, nullable=False)
    bar = sql.Column(sql.String, primary_key=True, nullable=False)
    baz = sql.Column(sql.String, primary_key=True, nullable=True)
    bif = sql.Column(sql.Integer, nullable=False)


def main():
    print sql.__version__
    engine = sql.create_engine('sqlite://')
    Base.metadata.create_all(engine)
    Session = sql.orm.sessionmaker(bind=engine)
    session = Session()
    session.add(Foo(foo='0', bar='bar', baz='baz', bif=1))
    session.add(Foo(foo='1', bar='bar', baz=None, bif=1))
    session.add(Foo(foo='2', bar='bar', baz=None, bif=1))
    print session.query(Foo).all()
    # this throws a Flush error
    x = session.query(Foo).filter(Foo.foo == '2').first()
    session.delete(x)

    # this works
    session.query(Foo).filter(Foo.foo == '1').delete()

    # this throws a Flush error
    x = session.query(Foo).filter(Foo.foo == '0').first()
    session.delete(x)

    print session.query(Foo).all()


if __name__ == '__main__':
    main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...