В настоящее время я пытаюсь переместить мои таблицы БД в InnoDB из MyISAM.У меня возникают проблемы с синхронизацией запросов и заданий cron, которые выполняются на сервере, что приводит к некоторым ошибкам.Я совершенно уверен, что поддержка транзакций поможет мне с этой проблемой.Поэтому я перехожу на InnoDB.
У меня есть набор тестов, которые выполняют вызовы REST API наших веб-сервисов и получают XML-ответы.Набор тестов довольно тщательный, он написан на Python и использует SQLAlchemy для запроса информации из базы данных.Однако, когда я меняю таблицы в системе с MyISAM на InnoDB, тесты начинают проваливаться.Тем не менее, тесты не дают сбоя, потому что система не работает, они терпят неудачу, потому что ORM неправильно запрашивает строки из базы данных, на которой я тестирую.когда я шагаю по коду, я вижу правильные результаты, но ORM вообще не возвращает правильные результаты.
Основной поток:
class UnitTest(unittest.TestCase):
def setUp(self):
# Create a test object in DB that gets affected by the web server
testObject = Obj(foo='one')
self.testId = testObject.id
session.add(testObject)
session.commit()
def tearDown(self):
# Clean up after the test
testObject = session.query(Obj).get(self.testId)
session.delete(testObject)
session.commit()
def test_web_server(self):
# Ensure the initial state of the object.
objects = session.query(Obj).get(self.testId)
assert objects.foo == 'one'
# This will make a simple HTTP get call on an url that will modify the DB
response = server.request.increment_foo(self.testId)
# This one fails, the object still has a foo of 'one'
# When I stop here in a debugger though, and look at the database,
# The row in question actually has the correct value in the database.
# ????
objects = session.query(Obj).get(self.testId)
assert objects.foo == 'two'
Использование таблиц MyISAM для хранения объектаи этот тест пройдет.Однако, когда я перехожу на таблицы InnoDB, этот тест не пройдет.Что более интересно, когда я выполняю код в отладчике, я вижу, что база данных имеет то, что я ожидаю, так что это не проблема в коде веб-сервера.Я перепробовал почти все комбинации expire_all, autoflush, autocommit и т. Д. И т. Д., Но до сих пор не могу пройти этот тест.
Я могу предоставить больше информации, если необходимо.Conrad