2015-12-22 3 views
-2

Базовая модель Django выглядит следующим образом:Как получить доступ к SQLAlchemy в Django Model?

class Person(models.Model): 
    first_name = models.CharField(max_length=30) 
    last_name = models.CharField(max_length=30) 

Эквивалентная модель SQLAlchemy с декларативной базы выглядит следующим образом:

from sqlalchemy import Column, Integer, String 
class Person(Base):`enter code here` 
    __tablename__ = 'persons' 
    id = Column(Integer, primary_key=True) 
    first_name = Column(String(30)) 
    last_name = Column(String(30)) 
+1

Что вы хотите сказать? Я вижу только утверждения. – dave

+0

i goning для использования ORM SQLAlchemy, который вы видите выше кода, определите класс и создайте таблицу в SQLA, но в Django Model deffrent, я собираюсь получить доступ к моделям модели django в SQLA, как? –

+0

Я не уверен, в чем вопрос, но похоже, вы хотите получить доступ к моделям Django из SQLAlchemy и наоборот? Вы можете добавить функцию к каждому классу, который возвращает свою противоположную версию (вроде бессмысленной), * или *, вы можете создавать модели каждого сорта, которые сопоставляются с одной и той же базой данных (не бессмысленно, а полезно только в особых обстоятельствах (такая же поддержка БД два проекта)). Оба довольно раздражают, и * все * ORM делают некоторые довольно пронзительные вещи в db на нетривиальных схемах. На самом деле я бы рекомендовал написать собственные функции store/retrieve в psycopg2. – zxq9

ответ

0

Вы можете добавить функцию к каждому классу, который возвращает свою противоположную версию , или вы можете создавать модели каждого сорта, которые сопоставляются с одной и той же базой данных. У каждого класса возможность вернуть свою противоположную версию довольно бессмысленно. Наличие двух структур ORM для одной и той же базы данных полезно только в том случае, если у вас простая простая схема данных (в противном случае сопоставление становится очень трудным, независимо от того, какая структура не создала базу данных).

Оба довольно раздражающие, и все ORM-ы делают какие-то довольно прощальные вещи в db на нетривиальных схемах. На самом деле я бы рекомендовал написать собственные функции store/retrieve в psycopg2.

Я просмотрел некоторые из них, как это сделать со стороны Django here. То же самое можно сделать в SQLAlchemy. Тем не менее, вы быстро обнаружите, что вы начнете писать более сырые() запросы, чем на основе ORM, до такой степени, что это просто на самом деле проще просто написать классы по пути вы хотите и написать сериализацию методы, которые используют psycopg2 напрямую, чтобы поговорить с Postgres (или как бы то ни было бэкэндом db), я принимаю Postgres, потому что это самый распространенный).

Если у вас уже есть база данных, одна из структур, созданных я бы сильно рекомендую просто придерживаться этой ОРМ или преобразования схемы в наличии для реальной реляционной схемы вы проектируете вручную. Если у вас был проект, который когда-то был веб-проектом Django, но теперь он не является веб-сайтом, вы все равно можете использовать Django ORM независимо от остальной части фреймворка вместо того, чтобы пытаться переключиться на SQLAlchemy. После того, как вы позволите ORM создать схему, ваш проект выйдет замуж за эту структуру до конца своей жизни.

+0

Я не понимаю? как интеграция между SQLA и моделью Django? –

+0

@RaminFarajpourCami Существует * нет * прямой перевод с моделей SQLA на модели Django. Вам нужно будет написать преобразование вручную, либо путем сопоставления объектов SQLA с объектами Django, либо путем написания собственных методов чтения/записи базы данных для каждой модели SQLA. Это тонна работы без пользы. – zxq9

+0

Мне нужен рабочий проект django с SQLAlchemy без модели Django, у вас есть идея для этого? –

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