this post was submitted on 24 Sep 2023
8 points (100.0% liked)

Rust

5999 readers
3 users here now

Welcome to the Rust community! This is a place to discuss about the Rust programming language.

Wormhole

!performance@programming.dev

Credits

  • The icon is a modified version of the official rust logo (changing the colors to a gradient and black background)

founded 1 year ago
MODERATORS
 

in sequelize (javascript) it's pretty straightforward to either find a record, or create it if it doesn't exist. I don't see anything similar with sea-orm. There's a 'save' method that seems to insert or update, but I need to know details about the record ahead of time :/

Any ideas?

https://sequelize.org/docs/v6/core-concepts/model-querying-finders/

you are viewing a single comment's thread
view the rest of the comments
[–] Lmaydev@programming.dev 2 points 1 year ago (6 children)

I would likely do it in reverse. Try and find the object and if it doesn't exist create it.

[–] snaggen@programming.dev 4 points 1 year ago (5 children)

That will always be prune to race conditions, where you check if someting exists (then some other thread creates it) and then you try to create it. You should always try to create first, then if it fails due to it already existing, fetch it. That is a good general rule for anything from hashmaps to databases.

[–] BitSound@lemmy.world 3 points 1 year ago (1 children)

That's true, but also trying to create first has a race condition too. The above code will panic at the unwrap if the record is deleted after the failed insert, and before the select

[–] snaggen@programming.dev 2 points 1 year ago

So, a loop it is....

load more comments (3 replies)
load more comments (3 replies)