Найти - Пользователи
Полная версия: SQLAlchemy, ссылка объекта на самого себя и динамическое создание объекта модели
Начало » Базы данных » SQLAlchemy, ссылка объекта на самого себя и динамическое создание объекта модели
1 2 3
aCL
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 пишет. В интерфейсной части будем отображать полное имя этого пользователя.


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

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

PPS: я делаю что-то похожее, но у меня проще все, у меня всего три таблицы Node, Field, Relationship
aCL
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 сможет зарыться? Или лучше стоит ее как-нибудь останавливать?
bismigalis
aCL
А по поводу моей “рекурсии” что скажете?
не совсем понял что ты хочешь
посмотри здесь http://docs.sqlalchemy.org/en/rel_0_9/orm/examples.html много интересных техник

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

Интересно. Например? Хочу знать, в каком случае долбаться с ОРМ уже бесполезно
bismigalis
задача изначально такая, все модели хранятся в двух таблицах
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
хотел переделать под свои нужды, но у меня не получилось

4kpt_II
Т.е. фактически запрос должен возвращать один обджект, атрибуты которого собираются по двум таблицам? А как две таблицы связаны?
bismigalis
да.
field.nid -> node.__id__
4kpt_II
Фильтрация или упорядочивание по данным второй таблицы не нужна? Только получение? Или все же необходимы все сопутствующие операции?
PooH
4kpt_II
Интересно. Например? Хочу знать, в каком случае долбаться с ОРМ уже бесполезно

Ребята в очередной раз изобретают антипатерн EAV, похоже DBA в проекте нет, а то бы давно им выписал живительных люлей.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB