Я создаю таблицу в 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()