2012-06-01 2 views
6

У меня есть два приложения, которые имеют доступ к одной и той же базе данных. Первый имеет клиентов, подключающихся через TCP и записывающих в db с помощью SQLAlchemy. Второй - более типичный webapp, использующий Django. Оба имеют требования чтения/записи.Использование SQLAlchemy и Django ORM в одной базе данных

Я хотел бы объединить слой доступа к базе данных, но выбор только SQLAlchemy или просто Джанго непривлекателен, потому что:

  1. Я хотел бы использовать Джанго аутентификации, разрешения и плагинов может быть сторонних разработчиков, которые требуют Django ORM (исправьте меня, если я ошибаюсь).
  2. Для первого приложения с использованием SQLAlchemy (до сих пор) гораздо проще, чем пытаться использовать Django ORM за пределами приложения Django - это приложение TCP/IP server, а не HTTP/web-приложение.

Есть ли проблемы с смешиванием этих двух ORM в одной базе данных?

В какой системе (Django, SQLA) я должен создавать модели, а с помощью какой-то интроспекции, такой как Django inspectdb?

+0

Я только что нашел проект [django-sqlalchemy] (https://code.google.com/p/django-sqlalchemy/wiki/Roadmap). Я не знаю, подходит ли оно для ваших нужд, но это определенно стоит прочитать об этом. – noisy

ответ

6

Во-первых - это не очень сложно использовать Django ORM за пределами manage.py, Обработчики WSGI и другие связанные с HTTP материалы. Вы можете использовать любой скрипт python, но ему нужна некоторая инициализация (example).

Во-вторых - SQLA - очень мощный инструмент, и он способен делать вещи, которые очень трудно достичь в Django ORM (например, подлинный полиморфизм и полиморфные запросы). Если бы мне пришлось выбирать, я бы лично решил использовать Django ORM в качестве платформы для создания моделей, а затем вручную сопоставить их в SQLA, поскольку он гораздо более гибкий и, надеюсь, сможет принять. Что может не работать в противоположном случае.

Наконец, поскольку вы можете использовать Django ORM с обеих сторон, а вы только должны использовать Django ORM из-за плагинов, я предлагаю отказаться от SQLA. Это мощный инструмент, но также довольно сложный. Наличие двух разных ORM, работающих в одной базе данных, может привести к непредвиденным проблемам в будущем и повысить сложность вашего приложения, поэтому будет труднее поддерживать его.

+1

Спасибо. Я отвечу на ваш совет и откажусь от SQLA. – user1431368

Смежные вопросы