Очистить кэш-память sqlalchemy - PullRequest
2 голосов
/ 18 июня 2010

Я использую инструменты отражения sqlalchemy, чтобы получить объект Table. Я делаю это, потому что эти таблицы являются динамическими и таблицы / столбцы могут меняться. Вот код, который я использую:

def getTableByReflection(self, tableName, metadata, engine):

    return Table(tableName, metadata, autoload = True, autoload_with = engine)

Проблема заключается в том, что когда приведенный выше код запускается дважды, кажется, что он возвращает одинаковые результаты независимо от того, изменились ли столбцы или нет. Я попытался обновить с помощью mysession.refresh(mytable), но это не удалось, поскольку таблица не привязана ни к каким метаданным - что имеет смысл, но тогда почему я вижу кэшированные результаты?

Есть ли способ сказать метаданным / движку / сеансу забыть об этой таблице и разрешить мне ее аккуратно загрузить?

Ответы [ 2 ]

5 голосов
/ 21 июня 2010

Передайте вновь созданный, свежий экземпляр метаданных.

1 голос
/ 18 июня 2010

Благодаря комментарию codeape выше я смог исправить проблему, изменив синтаксис на:

def getTableByReflection(self, tableName, metadata, engine):

    return Table(tableName, MetaData(), autoload = True, autoload_with = engine)

Таким образом, каждый раз передавая новый экземпляр MetaData(),Это, вероятно, влияет на производительность, но это нормально для меня в этой части моего приложения.

Весь кредит codeape

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...