БД фауны – как создать в Python документ в коллекции со ссылками на документы в других коллекциях?Python

Программы на Python
Ответить
Anonymous
 БД фауны – как создать в Python документ в коллекции со ссылками на документы в других коллекциях?

Сообщение Anonymous »

У меня есть коллекция в Fauna DB с такой схемой:

Код: Выделить всё

collection yalofiles {
yaloid: Ref
yaloContentId: String
name: String
*: Any
}
где yaloid содержит ссылку на документ в другой коллекции. Я пытаюсь создать yalofile, как описано в документации по фауне здесь, на Python. Мои настройки:
  • Версия Python: 3.12.5
  • fauna 2.3.0 от PyPi (официальный драйвер Python для Fauna v10)
Код имитирует документацию (удалены попытки/исключения):

Код: Выделить всё

    def insertYalofile(self, yalofile, yaloId):
qyalo = fql(f'{YALOS_COLLECTION}.byId({yaloId})')
ryalo: QuerySuccess = self._client.query(qyalo)
yalofile["yaloid"] = ryalo.data  # yalo Document
query = fql(f'{YALOFILES_COLLECTION}.create({yalofile})')
res: QuerySuccess = self._client.query(query)  # This query FAILs with the error described below
return res.data
Но второй запрос возвращает ошибку, которая при обнаружении сообщает следующее:

Код: Выделить всё

400: invalid_query The query failed 1 validation check
---
error: Expected `)` or `,` at *query*:1:40
|
1 | yalofiles.create({'yaloid': Document(id='412701900943655120',coll=Module(name='yalos'),ts=datetime.datetime(2024, 10, 25, 7, 40, 53, 280000, tzinfo=datetime.timezone.utc),data={'name':'alfred stevens','yalotype':'artist','displayname':'Alfred Stevens','owner':'yaluba','artist':'412652432707813579','tags':['412472715978473675']}), 'yaloContentId': '66f5bbd2bff7b6328f8fb52a', 'name': 'alfred stevens', 'isMain': True, 'mime': 'image/jpeg', 'provider': 'cloudflare', 'stosol': 'r2'})
|                                        ^
|
Похоже, что yalofile["yaloid"] должен содержать не документ, а что-то еще. В документации фауны 2.3.0 есть класс DocumentReference, но я нигде не могу найти, как его использовать и заставить это работать.
Как создать в Python документ в коллекцию, содержащую ссылку на документ в другой коллекции?
-- ПРИЛОЖЕНИЕ --
После публикации я попробовал

Код: Выделить всё

yalofile["yaloid"] = models.DocumentReference(YALOS_COLLECTION, yaloId)'
и это не сработало (та же ошибка). Но это работает, если fql во втором запросе построен следующим образом:

Код: Выделить всё

yalofilestr = '{ \'yaloid\': yalos(' + yaloId + '), ' + repr(yalofile)[1:]
yalofilestr = yalofilestr.replace("True", "true") ;
yalofilestr = yalofilestr.replace("False", "false")
query = fql(f'{YALOFILES_COLLECTION}.create({yalofilestr})')
Это определенно совсем нехорошо. Для запроса fql весь объект должен быть правильно преобразован в строку. Даже логические значения необходимо преобразовать. Должен быть лучший способ сделать это в Python!!!


Подробнее здесь: https://stackoverflow.com/questions/791 ... docs-in-ot
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»