Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Базы данных
  • » SQLAlchemy, ссылка объекта на самого себя и динамическое создание объекта модели [RSS Feed]

#1 Ноя. 11, 2014 17:06:42

aCL
Зарегистрирован: 2013-11-13
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

SQLAlchemy, ссылка объекта на самого себя и динамическое создание объекта модели

bismigalis
т.е. свойство может принадлежать одному объекту и ссылаться на другой?

Да, конечно.
Есть у вас, например, таблица `user` со списком пользователей, `address` со списком адресов. У address есть поля: id,email,user_id. В a_object (списке “классов”, таблиц) получаем две записи:
1. object_id=1, name=“user”,table=“o_user”,…
2. object_id=2, name=“address”,table=“o_address”,…

В a_properties запись для свойства address.user_id будет примерно такой:
property_id=10 #например, конечно
object_id=2 #принадлежит объекту 2, “address”, таблица “o_address”
name=“user_id” #имя свойства, совпадает с именем поля в таблице “o_address”
ref_object=1 #ссылается на экземпляр объекта 1, “user”, таблица “o_user”.
ref_object_label_property=3 #какое свойство экземпляра объекта отображать в интерфейсной части приложения. Здесь, например, примем, что указано id свойства “fullname” объекта “user”

Полностью (и на более понятном и привычном языке) всё это дело будет читаться так:
К примеру, у нас есть какая-то запись в таблице address. В ней указан email, и id user`а, который с этого email пишет. В интерфейсной части будем отображать полное имя этого пользователя.


Офлайн

#2 Ноя. 11, 2014 17:08:05

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

SQLAlchemy, ссылка объекта на самого себя и динамическое создание объекта модели

полчается что алхимия не может определить по какому ForeignKey строить relationship
надо самому указывать через http://docs.sqlalchemy.org/en/rel_0_9/orm/relationships.html#sqlalchemy.orm.relationship.params.foreign_keys

PS: я понял свойство-ссылка
а как у вас многие-ко-многим реализовано?

PPS: я делаю что-то похожее, но у меня проще все, у меня всего три таблицы Node, Field, Relationship

Отредактировано bismigalis (Ноя. 11, 2014 17:18:06)

Офлайн

#3 Ноя. 11, 2014 17:25:46

aCL
Зарегистрирован: 2013-11-13
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

SQLAlchemy, ссылка объекта на самого себя и динамическое создание объекта модели

bismigalis
полчается что алхимия не может определить по какому ForeignKey строить relationshipнадо самому указывать через http://docs.sqlalchemy.org/en/rel_0_9/orm/relationships.html#sqlalchemy.orm.relationship.params.foreign_keysPS: я понял свойство-ссылкаа как у вас многие-ко-многим реализовано?PPS: я делаю что-то похожее, но у меня проще все, у меня всего три таблицы Node, Field, Relationship

Тьфу, точно. Сам не сообразил…
Спасибо

Если Вы про реализацию в архитектуре БД - у a_objects, служащих для хранения таблиц с таким типом связи, есть свойство-флаг link.
Если Вы про реализацию в python'е, то еще не приступал)
Но, честно роворя, каких-то сложностей и припятствий к реализации я не вижу…

А по поводу моей “рекурсии” что скажете? Как глубоко sa сможет зарыться? Или лучше стоит ее как-нибудь останавливать?

Офлайн

#4 Ноя. 11, 2014 17:41:21

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

SQLAlchemy, ссылка объекта на самого себя и динамическое создание объекта модели

aCL
А по поводу моей “рекурсии” что скажете?
не совсем понял что ты хочешь
посмотри здесь http://docs.sqlalchemy.org/en/rel_0_9/orm/examples.html много интересных техник

я ушел от orm(не получалось сделать некоторые вещи), использую только core для запросов и строю объекты как мне надо

Офлайн

#5 Ноя. 11, 2014 18:58:44

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

SQLAlchemy, ссылка объекта на самого себя и динамическое создание объекта модели

bismigalis
я ушел от orm(не получалось сделать некоторые вещи), использую только core для запросов и строю объекты как мне надо

Интересно. Например? Хочу знать, в каком случае долбаться с ОРМ уже бесполезно

Отредактировано 4kpt_II (Ноя. 11, 2014 19:08:27)

Офлайн

#6 Ноя. 11, 2014 20:32:43

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

SQLAlchemy, ссылка объекта на самого себя и динамическое создание объекта модели

задача изначально такая, все модели хранятся в двух таблицах

CREATE TABLE `node` (
	`__id__`	INTEGER NOT NULL,
	`__pid__`	INTEGER NOT NULL,
	`__name__`	VARCHAR NOT NULL,
	`__namelevel__`	INTEGER NOT NULL,
	`title`	VARCHAR NOT NULL,
	`__type__`	VARCHAR NOT NULL,
	`__acl__`	TEXT,
	PRIMARY KEY(__id__)
);
CREATE TABLE `field` (
	`nid`	INTEGER NOT NULL,
	`key`	VARCHAR(64) NOT NULL,
	`type`	VARCHAR(16),
	`int`	INTEGER,
	`str`	TEXT,
	`bool`	BOOLEAN,
	PRIMARY KEY(nid,key)
);

нужно замапить так чтобы у объекта были через аттрибуты доступны значения из первой таблицы и из второй таблицы значения из полей int, str, bool в зависимости от значения поля type и нужно чтобы для аттрибутов из второй таблицы это было lazy, то есть при первом обращении к аттрибуту делается запрос и все аттрибуты добавляются к объекту.

я начинал с такой штуки http://docs.sqlalchemy.org/en/rel_0_9/_modules/examples/vertical/dictlike-polymorphic.html
хотел переделать под свои нужды, но у меня не получилось

Офлайн

#7 Ноя. 11, 2014 21:50:42

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

SQLAlchemy, ссылка объекта на самого себя и динамическое создание объекта модели

Т.е. фактически запрос должен возвращать один обджект, атрибуты которого собираются по двум таблицам? А как две таблицы связаны?

Офлайн

#8 Ноя. 11, 2014 22:21:51

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

SQLAlchemy, ссылка объекта на самого себя и динамическое создание объекта модели

да.
field.nid -> node.__id__

Отредактировано bismigalis (Ноя. 11, 2014 22:22:07)

Офлайн

#9 Ноя. 11, 2014 23:07:43

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

SQLAlchemy, ссылка объекта на самого себя и динамическое создание объекта модели

Фильтрация или упорядочивание по данным второй таблицы не нужна? Только получение? Или все же необходимы все сопутствующие операции?

Отредактировано 4kpt_II (Ноя. 11, 2014 23:07:53)

Офлайн

#10 Ноя. 12, 2014 05:33:50

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

SQLAlchemy, ссылка объекта на самого себя и динамическое создание объекта модели

4kpt_II
Интересно. Например? Хочу знать, в каком случае долбаться с ОРМ уже бесполезно

Ребята в очередной раз изобретают антипатерн EAV, похоже DBA в проекте нет, а то бы давно им выписал живительных люлей.



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

  • Начало
  • » Базы данных
  • » SQLAlchemy, ссылка объекта на самого себя и динамическое создание объекта модели[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version