SQLx is my favorite PostgreSQL driver to use with Rust.

Sdílet
Vložit
  • čas přidán 23. 07. 2024
  • SQLx is perhaps my favorite Rust crate for interfacing with Postgres, my favorite relational database. It provides a number of features and support that I haven't been able to find in an asynchronous framework.
    In this video, I take a look at the basic usage and also some of the more advanced features that are available with feature flags.
    This should provide a decent tutorial for anyone who is looking for a database driver for their Rust project.
    Source code: github.com/dreamsofcode-io/ru...
    Become a better developer in 4 minutes: bit.ly/45C7a29 👈
    My socials:
    Twitter: / dreamsofcode_io
    Discord Server: / discord
    #rust #postgresql #coding #tutorial #tokio
    00:00 Intro
    00:10 Getting started
    02:10 Migrations
    03:34 Writing data
    04:46 Reading Data
    06:46 Transactions
    07:36 Feature Flags
    09:05 Notifications
    09:24 Outro
  • Věda a technologie

Komentáře • 95

  • @256k_
    @256k_ Před rokem +14

    this was such a good intro to DB handling in rust! definitely demystified a lot the process. i was still learning rust building up to using it for backend development by for some reason was really terrified of how it would be like but honestly its really a reasonable experience and im looking forward to getting to that point.

    • @dreamsofcode
      @dreamsofcode  Před rokem +1

      I'm really glad to hear that! Thank you for the feedback. I'm looking forward to doing some more microservice content in rust in the future as well.

  • @spr3ez
    @spr3ez Před rokem +9

    Really love your videos. Rust and Postres are just best. keep it up!

  • @vlad7951
    @vlad7951 Před 18 dny

    Nice! Thanks for the video! It helped me a lot with a small project that I had to move from SQLite to Postgres coming from a JS background.

  • @UthpalaHeenatigala
    @UthpalaHeenatigala Před rokem +5

    These tutorials are brilliant. Keep going you have something here :)

  • @Floppix93
    @Floppix93 Před rokem +1

    Really love the content ! Funny, informative and on point. Keep up the great work

    • @dreamsofcode
      @dreamsofcode  Před rokem

      Thank you!

    • @alangamer50
      @alangamer50 Před rokem

      fr, some mfs would have taken an entire video just to explain the installation

  • @gustav_spin
    @gustav_spin Před rokem +1

    Thank you very much for the video, I was even looking for one that explained the use of sqlx.

  • @jmon24ify
    @jmon24ify Před 12 dny

    Nice video! How the code is written remind me a lot of how I did things in PHP back in the day so it was very easy to understand.

  • @LinuxForLife
    @LinuxForLife Před 10 měsíci +1

    Really inspiring! Thank for the share. 👍🍬

  • @user-pj9qk9ki2d
    @user-pj9qk9ki2d Před 10 měsíci +1

    very helpful, thank you!

  • @dmytrozelinskyi4824
    @dmytrozelinskyi4824 Před 2 měsíci

    Short and clear. Thank you !

  • @coderaiders-yt
    @coderaiders-yt Před 10 měsíci +1

    I was having a horrific day trying to connect to my AWS Postgres db in Rust, until this video. Thank you!!

  • @xit
    @xit Před rokem +2

    Learned a lot of new stuffs. Thanks! :D Subbed!

    • @dreamsofcode
      @dreamsofcode  Před rokem

      Oh awesome! I'm really glad you enjoyed it. Thank you!

  • @tumi_tigur
    @tumi_tigur Před rokem +1

    Very good video, cant believe im excited to test an sql package

  • @clusterdriven
    @clusterdriven Před 6 měsíci +1

    Great video!

  • @sergp7480
    @sergp7480 Před rokem +2

    the density of knowledge is insane, keep it up!
    I really like your rust videos. Have you thought about creating rust + iced video or any other idiomatic rust gui lib?

    • @dreamsofcode
      @dreamsofcode  Před rokem

      Thank you! I appreciate that. I wonder if it's perhaps too dense and I should spread it out some what 😅.
      I haven't yet but I will look into it! I've wanted to do a gui library video for a while so perhaps now is a good excuse to do so!

  • @lautaroblasco
    @lautaroblasco Před 11 měsíci +1

    Good video bro

  • @minzmango1915
    @minzmango1915 Před rokem +3

    Man, you're a blessing. I don't really care about Rust that much tbh, but I just love your videos

    • @dreamsofcode
      @dreamsofcode  Před rokem

      Oh thank you, I appreciate that a lot 🙏 Anything you wanna see? I'm still figuring out what I wanna niche down on!

    • @minzmango1915
      @minzmango1915 Před rokem +2

      @@dreamsofcode Since you seem to like it, I'd be interested in a Postgres deep dive (like interesting features it has that other DBMS don't or something like that). But honestly I'll consume whatever you upload

    • @dreamsofcode
      @dreamsofcode  Před rokem

      Ok awesome. I have a lot I can dig into with postgres!

  • @jacoblaney3011
    @jacoblaney3011 Před rokem +2

    Really dig the video. Dig all of your vids actually. I just have one question: what next? I get this is more of a theory driven video, showing how interacting with a Postgres database can be done via Rust using a rust crate but how might one use something like this in a real application outside of just changing the params and CRUD code in your IDE? Maybe showing what it takes to have a JavaScript front end that invokes a Rust backend? Or even just a command line interaction?

    • @dreamsofcode
      @dreamsofcode  Před rokem +1

      Thank you for the feedback.
      That's a great question. I think a video that goes over the entire flow of creating a microservices in rust might be beneficial to help tie everything together!

  • @ruleofnine5905
    @ruleofnine5905 Před 9 měsíci +7

    if anyone else the " the trait `Executor

  • @ikys9143
    @ikys9143 Před rokem +2

    Came from diesel headache. Great content. Subscribed..

  • @GlobalYoung7
    @GlobalYoung7 Před rokem +1

    thank you 😊

  • @luiscarlosjayk
    @luiscarlosjayk Před měsícem

    Hey, think you missed to mention the cargo sqlx prepare command, and offline mode.

  • @kairunhanjun
    @kairunhanjun Před 6 měsíci

    What %1 and $1 is for? can i put custom column like UPDATE book SET `#1`=%1 WHERE ISBN = $3?

  • @clusterdriven
    @clusterdriven Před 5 měsíci

    Is there a way to have the migrations have some programmatic sauce in them? I see the migrations in the SQL format. I wonder if there is a way to write migrations in rust instead?

    • @dreamsofcode
      @dreamsofcode  Před 5 měsíci +1

      An ORM would be able to do migrations in Rust. SeaORM is one that's pretty popular

  • @peterboshe6217
    @peterboshe6217 Před 6 měsíci

    A thumbs up solely for the mean girl's reference. solid and informational material but yeah, mean girls.

  • @user-hn1cy5ee5l
    @user-hn1cy5ee5l Před 3 měsíci

    what about choosing database driver at runtime? for example if application needs to support at least 2 databases - sqlite for tests and postgres for production?

    • @dreamsofcode
      @dreamsofcode  Před 3 měsíci

      Id personally use PostgreSQL for testing via something like testcontainers. Otherwise you're not really testing your database interactions with PostgreSQL.
      I'll have a video coming out about that soon!

  • @yapet
    @yapet Před rokem +8

    I don’t think you need turbofish for query_as. I find it much more convenient to just add type annotation to the variable declaration, ie`let book: Book = …`
    God I love ocaml-ish/haskell-ish type deduction of rust.

    • @ant1fact
      @ant1fact Před rokem +1

      I like to annotate my variables too. There are still some places like closures where you can't always avoid turbofish though

  • @TheBurntHoney
    @TheBurntHoney Před 7 měsíci +1

    Why do you have the query on two seperate lines? Eg q=“” query=sqlx::query(q)

  • @narthanaj
    @narthanaj Před 8 měsíci +1

    Im gonna learn rust

  • @kappilino
    @kappilino Před 9 měsíci +1

    Is SQLx verifying the querys in term of securtiy aspekts as sql injections ? Because it is quite time consuming and error-prone to do it yourself. The posgres crate and rusqulite make this

    • @Mankepanke
      @Mankepanke Před 2 měsíci

      Yes, since parameters are all bound parameters.

  • @danraine9009
    @danraine9009 Před rokem +1

    Awesome video, could you make a video on handling errors coming from poetgresql I have implemented the happy path nicely but am struggling to decode any errors for example if two email addresses match when trying to add a something to the db. Thanks again ❤️

    • @dreamsofcode
      @dreamsofcode  Před rokem +1

      Absolutely! This is a great idea

    • @danraine9009
      @danraine9009 Před rokem

      @@dreamsofcode awesome thank you for your work

  • @uberloss
    @uberloss Před 4 měsíci

    I'm a beginner and I find bugs in the tutorial hard to figure out like why the second argument to update() is never used. What is the point of it.

  • @bendo01
    @bendo01 Před 8 měsíci +1

    can you teach us using sqlxmq ?

  • @vencler
    @vencler Před rokem +2

    Hey, unrelated question/suggestion: would you be willing to create a video covering your setup (tooling, apps, themes, best practices, anything usefuf/interesting in regards to software/hardware.)? If so, that would be dope. :)

    • @dreamsofcode
      @dreamsofcode  Před rokem +1

      I absolutely would love to! I have so many videos I could make on it haha

    • @vencler
      @vencler Před rokem

      @@dreamsofcode i turned on the notifications, looking forward to it!

  • @user-mu1nd8hk1g
    @user-mu1nd8hk1g Před rokem +1

    I don't care about Rust, the video is just enjoyable 😁

    • @dreamsofcode
      @dreamsofcode  Před rokem

      That means an awful lot to me! ❤️
      Is there anything you'd like to see that I can create for you?

  • @brencancer
    @brencancer Před 10 měsíci +1

    i like the code editor , is it sublime, atom or vscode? linux distro??

    • @theintjengineer
      @theintjengineer Před 9 měsíci +1

      It looks like a highly customised (Neo)Vim [an editor]; this isn't the best part though - it's this skills with it.
      It's probably what he talks about on one of the videos in the same playlist ["Perfect Neovim setup for Rust"]

    • @Mankepanke
      @Mankepanke Před 2 měsíci +1

      It's NeoVim, inside of Tmux running the Catppuccin theme. Looks like.

  • @mrknopester
    @mrknopester Před rokem +1

    What are your thoughts on SeaORM?

    • @dreamsofcode
      @dreamsofcode  Před rokem

      I need to try it out, really! Although personally I tend to not use ORM's too often as I like to handcraft SQL sometimes. SeaORM does look really appealing though.

  • @hussainsharza9319
    @hussainsharza9319 Před 5 měsíci

    Short and Simple

  • @SandwichMitGurke
    @SandwichMitGurke Před rokem

    and why do you prefer it over diesel?

    • @dreamsofcode
      @dreamsofcode  Před rokem +1

      Diesel isn't async, and it's an ORM. So those are the two considerations I have against it.

  • @ruizdiazever
    @ruizdiazever Před rokem

    Is very fast and simple buy with Axum change everything! D:

  • @johnnyblack4261
    @johnnyblack4261 Před 8 měsíci +1

    WHich one should I use sqlx or sea-orm?

    • @dreamsofcode
      @dreamsofcode  Před 8 měsíci +1

      It depends on what your personal preference is! I typically prefer raw SQL to ORMs as I feel it gives a greater level of understanding, but not everyone thinks the same way as I do

    • @johnnyblack4261
      @johnnyblack4261 Před 8 měsíci +1

      @@dreamsofcode I see mate, after taking a look between the two, I think I would prefer Sea_orm as you are not using strings to do select statements etc, easily using strings to do select statements can lead to bugs as you can compile it with a syntax error, at least with seaorm it will fail to compile, plus you get auto suggestions.

    • @dreamsofcode
      @dreamsofcode  Před 8 měsíci +1

      @@johnnyblack4261 I think if that works for you, you should go for it! I tend to make use of testing to be sure that the sql statements work, rather than fully trusting the compiler when it comes to databases!

    • @johnnyblack4261
      @johnnyblack4261 Před 8 měsíci +1

      @@dreamsofcode Ah right makes sense.
      I actually got another question, if I wanted to have a (small) database webserver and I wanted to use seaorm, would the seaorm code run on the client's software?

    • @dreamsofcode
      @dreamsofcode  Před 8 měsíci +1

      @@johnnyblack4261 for web applications, generally no. You should have an API that is called and the database connection live on the server.

  • @CorneliusCornbread
    @CorneliusCornbread Před rokem

    Why use tokio over the standard async library?

    • @dreamsofcode
      @dreamsofcode  Před rokem

      You still need a runtime for async in Rust. I believe there's only async_std, tokio and smol. Tokio is the most popular of the three.

  • @spr3ez
    @spr3ez Před rokem +2

    Whats you neovim theme?

    • @dreamsofcode
      @dreamsofcode  Před rokem +2

      Catppuccin! It's probably my favorite color scheme

    • @spr3ez
      @spr3ez Před rokem +1

      @@dreamsofcode yeah its really cool! thanks ima try it, I already use a very similar one, so probably gonna switch

  • @tiagocerqueira9459
    @tiagocerqueira9459 Před 8 měsíci

    I need your theme

  • @sergp7480
    @sergp7480 Před rokem +1

    4:39 - typo &sqlx::PgPool not &sqlx:PgPool
    4:43 - typo $1 not %1

  • @kurt7020
    @kurt7020 Před rokem +2

    "I'd also consider using it for other databases such as mysql" - Face it, there's no way you're ever going back to mysql. XD

    • @dreamsofcode
      @dreamsofcode  Před rokem +1

      🤣🤣🤣 bruh how you know me so well

  • @coffee-is-power
    @coffee-is-power Před 11 měsíci +3

    You completely forgot the sqlx macros, they're really amazing, they run the queries at compile time on your local database to check if they're valid

  • @sharkpyro93
    @sharkpyro93 Před rokem +2

    what about relationships? there is not 1 single example online on how to handle relationships with sqlx

    • @dreamsofcode
      @dreamsofcode  Před rokem

      Are you talking about joining data sets using a SQL JOIN and returning the data model?

    • @sharkpyro93
      @sharkpyro93 Před rokem

      @@dreamsofcode i was referring to provide the query_as() with a model that has some nested structs with different relationships mapping to them automatically, turns out is not doable, its either i go full on raw sql and setting the results manually, or using an orm but diesel orm stinks and seaorm is terrible too, guess i cannot use rust

    • @alexandrucomanescu9857
      @alexandrucomanescu9857 Před 9 měsíci

      @@sharkpyro93 I came to the same conclusion. On top of that relationships in SeaORM, according to the docs, have to be done using the lazy concept when you have more than 2 relationships. Which is the same as using sqlx and then manually mapping the results. I invested a lot more than I was anticipating.

    • @sharkpyro93
      @sharkpyro93 Před 9 měsíci

      @@alexandrucomanescu9857 yea rust is not a good fit for apps that need intense db crud, takes forever to manually write everything, also its not a safe approach

    • @Mankepanke
      @Mankepanke Před 2 měsíci

      I suppose you do it the same way as you always do when not working with an ORM. Is there something specific that you don't find to be working well?