sqlalchemy: та же база для разных таблиц - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть разные таблицы, которые я объявляю очень стандартным способом, но с глобальной базой:

GlobalData.py

from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()

init()
engine= ...
Base.metadata.create_all(engine)

TableA.py

import globaldata as gd
TableA(gd.Base)
...

TableB.py

import globaldata as gd
TableB(gd.Base)
...

Проблема: если я импортирую TableA или TableB более одного раза в другие файлы, таблицы будут добавлены в метаданные более одного раза. Затем возникает конфликт при попытке выполнить какое-либо действие с одной из этих таблиц.


EDIT

При попытке получить доступ к таблице возникает проблема:

В реестре этой декларативной базы найдено несколько классов для пути "RolloutPermission". Пожалуйста, используйте полный путь к модулю.

Я предполагаю, что это проблема проектирования, однако я не вижу, что не так с моим. Любой вклад приветствуется

1 Ответ

0 голосов
/ 24 апреля 2020

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

init()   

engine=Base.metadata.create_all(engine)

Затем я импортирую свою базу в файл env из alembi c и генерирую миграции. Если вы собираетесь работать с немного более сложным, я настоятельно рекомендую перенести файлы миграции:).

Проблема действительно может заключаться в том, что вы в основном вызываете create_all при каждом импорте. Посмотрите на alembi c, избавьтесь от нескольких строк, которые я написал выше, и у вас будет рабочий код:)

...