Похожие чаты

How to properly use UUID for making quries with SQLAlchemy

to not get error from postgres like "cannot cast type record to uuid"

I have Cards Repository, that has delete method, which uses squence of uuid, if uuid in that sequnce they must be deleted from db.

method:
`def delete(self, cardsids: Sequence[UUID5]) -> Sequence[UUID5]:
stmt = (
delete(Card)
.where(Card.id.in_([cardsids]))
.returning(Card.id)
)

with self.ss.begin():
return self.ss.execute(stmt) # type:ignore`

Then I am trying to delete values:
`Cards.delete(
cardsids=(
UUID("ffbbd142-c9bf-4c66-8b9d-6ebc4806a8cc"),
UUID("5cce0583-f506-4d0b-8fa9-f5604dfddde6"),
)
)`

but unfortunately get error from postgres:
`sqlalchemy.exc.ProgrammingError: (psycopg2.errors.CannotCoerce) cannot cast type record to uuid
LINE 1: ...6ebc4806a8cc', '5cce0583f5064d0b8fa9f5604dfddde6')::UUID) RE...
^

[SQL: DELETE FROM cards WHERE cards.id IN (%(id_1_1)s::UUID) RETURNING cards.id]
[parameters: {'id_1_1': ('ffbbd142c9bf4c668b9d6ebc4806a8cc', '5cce0583f5064d0b8fa9f5604dfddde6')}]`


As you can see SQLAlchemy have made syntax erros for casting simlpe string to uuid.
So instead of:
LINE 1: ...6ebc4806a8cc', '5cce0583f5064d0b8fa9f5604dfddde6')::UUID) RE...
As I think must be::
`LINE 1: ...6ebc4806a8cc':UUID, '5cce0583f5064d0b8fa9f5604dfddde6':UUID)) RE...

Model and his types:
`class Card(BaseModel):
tablename = "cards"

id: Mapped[pkuuid4]
user_id: Mapped[pkuuid4]
origin: Mapped[str64]
interpretation: Mapped[str512]
example: Mapped[str512]
curtt: Mapped[timestamp]
nextt: Mapped[timestamp]
last_rotate: Mapped[numeric]

str64 = Annotated[str, mapped_column(String(64))]
str512 = Annotated[str, mapped_column(String(512))]

pkuuid4 = Annotated[UUID, mapped_column(Uuid(as_uuid=True), primary_key=True)]

numeric = Annotated[
float, mapped_column(Numeric(precision=4, scale=2, asdecimal=False))
]

timestamp = Annotated[datetime, mapped_column(DateTime(timezone=True))]`


**So I assume that i'm passing incorrectly UUID to SQlAlchemy statment in body part of delete method in Cards repository. Perhaps somone knows how correctky use python UUID to make queries?

P.S. I tried to pass uuids as string as it was, instead of pasing them to uuid.UUID() but with just strings i have the same error**

5 ответов

34 просмотра

https://github.com/sqlalchemy/sqlalchemy/discussions/10666

⛧🇮🇱 Shennaz Martinez 🇺🇸🗽
Какой я нахуй слепой даун

Ох, такая мелочь, а сколько часов дебага стоила? Кстати, а почему mypy не ругнулся? Хотя формально он получил Sequence[Any] и на том его полномочия по идее всё

⛧🇮🇱 Shennaz Martinez 🇺🇸🗽
2 часа.

Просто оставил зайвые [], и сижу с мудрым лицом, думаю как же решить эту проблему, "это же не моя, это же проблема в сукулеалхимии, я же не могу быть слепым"

Похожие вопросы

Обсуждают сегодня

А кто-то пробовал, уезжая из Эстонии получить э-рез и продолжить вести предпринимательскую деятельность внутри Эстонии, используя свой OÜ?
Lalalashechki Lalala
57
@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Does anyone here have a connection Mullvad? it would be nice to know what it would take to have them accept BCH 0-conf.
tl121x
16
Подобного рода ;Следующие три строки это директивы ассемблера, ;которые можно не задавать, т.к.работаем в Visual Studio. ;Символ ";" - это начало однострочного комментария ...
Егор Анелькин
3
@samkazemian - couple questions: Update on frxBTC? - This would do well with the current influx of institutional investment entering the space Update on future veFXS streams...
Costi
10
Can an XMR transaction be tracked from its sender to its receiver by performing blockchain analysis, no matter how many addresses are used?
Trkz342
16
I arrived here after a Chico Crypto show highlighted the project & the Team - the fact that the Team had a long history of successfully working with household names gave me e...
Banter is Bullish
5
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
Карта сайта