Моя PostgreSQL
таблица выглядитпитон, тест не подведет при вставке же строку дважды
Table "public.categories"
Column | Type | Modifiers
------------+--------------------------+-----------
uuid | uuid | not null
name | character varying | not null
parent | character varying | not null
created_on | timestamp with time zone | not null
Indexes:
"categories_pkey" PRIMARY KEY, btree (uuid)
"categories_name_parent_key" UNIQUE CONSTRAINT, btree (name, parent)
Referenced by:
TABLE "transactions" CONSTRAINT "transactions_category_id_fkey" FOREIGN KEY (category_id) REFERENCES categories(uuid)
имеющий unique(name, parent)
. Мой Test
является
def setUp(self):
db.create_all()
def session_commit(self):
# noinspection PyBroadException
try:
db.session.commit()
except:
db.session.rollback()
finally:
pass
def test_insert_same_category_twice(self):
"""
category, parent relationship is unique
"""
db.session.add(Category('test_insert_same_category_twice', 'parent1'))
self.session_commit()
self.assertEquals(1, len(db.session.query(Category).all()))
db.session.add(Category('test_insert_same_category_twice', 'parent1')) # should fail
self.session_commit()
def tearDown(self):
db.session.close()
for tbl in reversed(db.metadata.sorted_tables):
db.engine.execute(tbl.delete())
Это должно произойти сбой при попытке вставить новую категорию с тем же name
и parent
из-за UniqueConstraint
в базе данных, но это не
Кроме того, когда я утверждаю, в последней строке (опущено в коде выше), сколько записей у меня есть в таблице
self.assertEquals(2, len(db.session.query(Category).all()))
Он терпит неудачу
self.assertEquals(2, len(db.session.query(Category).all()))
AssertionError: 2 != 1
Это означает, что он перезаписывает существующую запись?
Что здесь общего не работает?
UPDATE
В соответствии с @ sr2222 ответа, я решил ошибку в моем следующем методе
def session_commit(self):
# noinspection PyBroadException
try:
db.session.commit()
except:
db.session.rollback()
raise # added error to propagate up
finally:
pass
Отличный ответ! это наверняка ошибка, я ее исправил – daydreamer