SQLAlchemy Turns Python Objects Into Database Entries

Поделиться
HTML-код
  • Опубликовано: 25 окт 2022
  • Today we learn about SQLAlchemy, which is an SQL Toolkit and ORM that allows us to map Python classes to database tables.
    ◾◾◾◾◾◾◾◾◾◾◾◾◾◾◾◾◾
    📚 Programming Books & Merch 📚
    🐍 The Python Bible Book: www.neuralnine.com/books/
    💻 The Algorithm Bible Book: www.neuralnine.com/books/
    👕 Programming Merch: www.neuralnine.com/shop
    🌐 Social Media & Contact 🌐
    📱 Website: www.neuralnine.com/
    📷 Instagram: / neuralnine
    🐦 Twitter: / neuralnine
    🤵 LinkedIn: / neuralnine
    📁 GitHub: github.com/NeuralNine
    🎙 Discord: / discord
    🎵 Outro Music From: www.bensound.com/
  • НаукаНаука

Комментарии • 111

  • @dustinrolsander8336
    @dustinrolsander8336 Год назад +34

    Very clean and easy to understand, thanks for the video.
    Just a small hint: at 18:51 you couldn't see the table, bc the database windows won't refresh automatically in PyCharm. You have to click the refresh button at the top of the panel (third symbol in ur case). Then it will show the additionally created tables.

  • @kharutyunyan82
    @kharutyunyan82 Год назад +6

    One of the best channels in youtube! Thanks for your work!!!

  • @rogueb1t
    @rogueb1t Год назад +2

    Ive watched this video sooooo many times! Brilliant tutorial on using SQLAlchemy to abstract SQL from python. I also loved your CLASSES video! Its helped me develop my code so much faster. Cheers dude!"

  • @rpf23543
    @rpf23543 Год назад +1

    Very great article. Short, distinct on the point - Thank you!

  • @stevekruger7807
    @stevekruger7807 3 месяца назад +1

    Thanks! Very clear, easy to follow, learned enough to get me started!

  • @radio_electronics4047
    @radio_electronics4047 Год назад +30

    One of the imports used is deprecated. For SQLAlchemy 2.0.10 the import for the declarative_base needs to look like this:
    from sqlalchemy.orm import declarative_base

  • @reginaldmaisonneuve7594
    @reginaldmaisonneuve7594 4 месяца назад

    Nicely done. Simple and effective example that immediately clarified proper structure.

  • @ootbinc
    @ootbinc Год назад +1

    Great video! I currently create and update SQL rows by calling stored procedures. I want to give SQLAlchemy a try.

  • @juliusokwe9524
    @juliusokwe9524 6 месяцев назад

    Clear and informative video. I have just started to learn orm and sqlalchemy and this video is superb. Thanks for sharing.

  • @Nithishraj-dr4yr
    @Nithishraj-dr4yr Год назад

    stright to the point..awesome man

  • @andymandrill
    @andymandrill Год назад

    This has been an awesome tutorial TY, I learned enough to continue my project !
    Geatings from colombia !

  • @bundesdavid
    @bundesdavid Год назад +9

    Thank you very much for the help! :^)
    At 14:00 you could also use
    results = session.query(Person).filter(Person.lastname == "Smith").all()
    with the .all() at the end you select every element fitting to the filter!

    • @joxa6119
      @joxa6119 8 месяцев назад +1

      Life saver!

  • @sandhiyasuresh2275
    @sandhiyasuresh2275 Год назад

    really great session , everything is clear and easy to understand. thank you...

  • @ThatGuyEster
    @ThatGuyEster Год назад

    This is a treasure!
    Thank you so much!

  • @benshapiro9731
    @benshapiro9731 11 месяцев назад +2

    Hey man solid video, but should add a note that you are, in fact, using the legacy (albeit backward compatible) syntax here. Mapped_column() is now the new factory function for the Column() class

  • @aleksalukic1904
    @aleksalukic1904 Год назад

    this video has saved me a lot of time. thanks for your work :*

  • @Cire-my6ur
    @Cire-my6ur 4 месяца назад

    1:09 this is exactly what I was looking for. THANK YOU!

  • @nujanai
    @nujanai Год назад

    Excellent tutorial. Thank you for the content.

  • @janHodle
    @janHodle 10 месяцев назад +3

    Isn‘t the use of Column legacy? I know this video is 8 months old. I think a better way is to use: first_name: Mapped[str] = mapped_column(String, nullable=True)…. If the information are optional one can use Optional from the typing library

  • @Mustafa-qs2rq
    @Mustafa-qs2rq Год назад

    This was very well explained.

  • @Troteos
    @Troteos 4 месяца назад

    Another great video. You are such a good teacher, while your style of explaining things seems so effortless.

  • @michaelnockov2096
    @michaelnockov2096 4 месяца назад

    Thank you for this video, I was looking for soft introduction to sqlalchemy. Their documentation is quite difficult and their quick start actually don’t show the easiest ways to use it

  • @sivajyothichandra
    @sivajyothichandra 15 дней назад

    In the last query execution it results out the object of respective classes. In the iteration of the loop, print(r) displayed both classes __repr__ method string format

  • @toobeeus4648
    @toobeeus4648 7 месяцев назад

    Thanks. That helped a lot!

  • @pythonwriter8233
    @pythonwriter8233 Год назад

    Informative thanks!

  • @alefalfa
    @alefalfa Год назад

    thanks. fantastic video!

  • @spanish360
    @spanish360 11 месяцев назад

    So with this I am now writing data from a PLC to a database to keep records for longer periods of time with out having to hold the data or do the logic inside of the PLC, thanks so much!

    • @pedromarques5510
      @pedromarques5510 11 месяцев назад

      hey, i am very curious about your work. i used to work with plcs but only assembly/wiring... i am now studying cs. could u please share your foundations? some key course maybe. thanks in advance. (can be in spanish, gracias)

  • @corazondepapel9346
    @corazondepapel9346 Год назад +4

    Bruh, I had no idea you could do this with SQLAlchemy. I use SQL a lot and always hated writing qries on Python

    • @fexofenadinaGenerica
      @fexofenadinaGenerica Год назад

      There are other alternatives to sqlalchemy too, like the peewee orm which is very nice as well

  • @bakalmode5903
    @bakalmode5903 Год назад

    great video keep it up!

  • @lovemich4237
    @lovemich4237 5 месяцев назад

    Thank you man.

  • @patinronin2991
    @patinronin2991 9 месяцев назад

    Hello, i have the same problem like you, when i add a table the base.metadata.create_all() dosnt create the table, how to solve that ? In a poppulated database is not a option to delete the db, i used alembic but some times dosnt generate the revision file with the changes.

  • @user-ur1kq6nu1u
    @user-ur1kq6nu1u 10 месяцев назад

    Great Help

  • @piotrmazgaj
    @piotrmazgaj Год назад

    Uuuuu... exactly what I was looking for! Thanks!

    • @chriskeo392
      @chriskeo392 Год назад

      plenty of these on RUclips already

    • @piotrmazgaj
      @piotrmazgaj Год назад

      @@chriskeo392 not on SQL Alchemy. Not in good english,

    • @piotrmazgaj
      @piotrmazgaj Год назад

      @@chriskeo392 not in GOOD english, read carefully please.

    • @chriskeo392
      @chriskeo392 Год назад

      @@piotrmazgaj I think you need to look up English tutorials instead 🤡

  • @pkavenger9990
    @pkavenger9990 Год назад +1

    Actually the reason why people call it sequel instead of SQL is because at first it was SEQL Structured English Query Language but then they skiped the E.

  • @machoToni
    @machoToni 11 месяцев назад

    Nice and simple

  • @princescadelpe
    @princescadelpe Год назад

    Can we create an engine if are database user only has Create, Drop, Delete permissions, or does our database user need to have All permissions set up?

  • @andreasfloter3904
    @andreasfloter3904 7 месяцев назад

    Your video gives a good introduction to SQLalchemy. I would like to make one comment though. As far as I know best practice for table creation is to use singular nouns and not pural names. It would be also easier if the object name and the table name is the same. So in your example it would have been better e.g. to use for class Person __tablename__ = "person".

  • @Somish3
    @Somish3 6 месяцев назад

    what if I have 5000 entries to insert? Is there any batch way, like a loop to read data from csv and add to the SQL DB or any other less manual way?

  • @nocopyrightgameplaystockvi231
    @nocopyrightgameplaystockvi231 Год назад

    I am thinking of making a similar module for my own project.

  • @MattDlax5
    @MattDlax5 Год назад

    Thank you bro

  • @sinkingboat101
    @sinkingboat101 Год назад

    Question: At around 7:00 the variable "firstname" defined inside the class is also defined as a variable in the constructor __init__ method. Usually, a class attribute can be called with self. ... , so is the init method overwriting the column definition or is the self.firstname call non-unique?

    • @benshapiro9731
      @benshapiro9731 11 месяцев назад

      In python there is a distinction between and instance attribute and class attribute. The class attribute is in the class’s __dict__ while the instance attr is in the instance’s __dict__. Sql alchemy’s major flaw is that it relies on this approach instead of a more pythonic one

  • @abigaildawson_dev
    @abigaildawson_dev 3 месяца назад

    At 13:55, you can add .all() at the end to return a list of the results, instead of iterating over them and printing:
    results = session.query(Person).filter(Person.lastname == "Blue").all()

  • @mouhamedtoure2800
    @mouhamedtoure2800 10 месяцев назад

    How do you configure pycharm and sqlserver to follow this tutotrial?

  • @chikkivenu6632
    @chikkivenu6632 7 месяцев назад

    Quick Question: How can we have multiple databases made and used? reason for asking is to create the microservice architecture environment.

  • @JLSXMK8
    @JLSXMK8 Год назад +8

    This would also be awesome for teaching/learning SQL. You can tell SQLAlchemy what you want to do, and use the output to learn how to do it in SQL.

  • @bradzoltick6465
    @bradzoltick6465 6 месяцев назад

    Thank you.

  • @user-cf6pr1zy9m
    @user-cf6pr1zy9m 10 месяцев назад

    from sqlalchemy import inspect
    inspector = inspect(engine)
    if not inspector.has_table('DB'):
    Base.metadata.create_all(engine)

  • @nickmills8476
    @nickmills8476 9 месяцев назад

    Nice video! The model constructors are generated automatically by sqlalchemy.

  • @stardustsong1680
    @stardustsong1680 Год назад +1

    Maybe you should use Jupyter notebook to avoid deleting the database every time running the code.

  • @mikedurham4448
    @mikedurham4448 11 месяцев назад

    this alchemy is the dope for us olderfarts trying to createwhile learning something to use -and hopefully rebuild some monstrosity i built in excel way back ..lol..
    +

  • @dmitrykononenko6411
    @dmitrykononenko6411 Год назад +1

    Is it possible to use sqlalchemy for more advanced sql queries? For example, I mean joining, subqueries or CVEs. Also how to do queries on views?

    • @konjikiyami7301
      @konjikiyami7301 Год назад +1

      Yes, you can use SQLAlchemy to perform advanced queries, and you can further customize the Python models, relationships, etc. If you find that the syntax of a query gets challenging in SQLAlchemy (has happened to me a few times), it also provides methods for you to be able to write the raw SQL yourself, and have the engine execute the query. I generally just wrote raw SQL when having to query views, though I admit most of my usecases did not need views, so I never dove too far with them.

  • @sonblue34
    @sonblue34 Год назад

    In this, you are creating your Engine in one file
    What am I to do if I have Classes in separate files?
    I assume I'm not to make multiple Engines for each Class and I'm not entirely sure how I make one engine for everything outside of the scope of the single file.
    I intend to use the async variation of this and multiple users will be potentially calling things.

    • @tim.martin
      @tim.martin Год назад +1

      Create the engine and session, create functions returning pointers to each (eg, GetEngine()) , save as "db . py". In another file:
      import db
      import db
      engine = db.GetEngine()
      session = db.GetSession()

  • @blackdragon5728
    @blackdragon5728 4 месяца назад

    UserWarning: pandas only supports SQLAlchemy connectable (engine/connection) or database string URI or sqlite3 DBAPI2 connection. Other DBAPI2 objects are not tested. Please consider using SQLAlchemy.
    MD_agric_df = pd.read_sql_query(text(sql_query), connection) i got this error guys hope someone help ASAP in my jupyter notebook please

  • @surajpatil8670
    @surajpatil8670 3 месяца назад

    Which plugin did you use to directly view .db file in Pycharm?

    • @NeuralNine
      @NeuralNine  3 месяца назад +1

      It is a feature of PyCharm. If it does not work for you, maybe it is only available in the Professional edition.

  • @aswathvanan3833
    @aswathvanan3833 Год назад

    can you use it with routes

  • @funy0n583
    @funy0n583 Год назад +1

    If anybody is getting a warning saying:
    "Deprecated API features detected! These feature(s) are not compatible with SQLAlchemy 2.0."
    you can fix it by changing "from sqlalchemy.ext.declarative import declarative_base" to "from sqlalchemy.orm import declarative_base"

  • @bennet5467
    @bennet5467 8 месяцев назад

    good stuff

  • @fexofenadinaGenerica
    @fexofenadinaGenerica Год назад

    Nice!

  • @powlock1994
    @powlock1994 Год назад

    Hello, is there any better way to create a table with hundreds of columns, instead of writing them by hands as arguments in the class? Thanks
    Regards

    • @robertstanton4694
      @robertstanton4694 4 месяца назад

      Where do you have the data containing hundreds of columns currently?

  • @tahmidhossain6349
    @tahmidhossain6349 5 месяцев назад

    Well what happens if I want to access a database which already exists

  • @j.k.notrowling2449
    @j.k.notrowling2449 5 месяцев назад

    Could you share the code you write in the tutorial?

  • @astianmuchui
    @astianmuchui 6 месяцев назад

    Perfect

  • @surajprasad118
    @surajprasad118 7 месяцев назад

    Brilliant video Thank You Sir :)
    Can I do the same with an auto increment column ?
    Thanks

    • @A.Mercier
      @A.Mercier 7 месяцев назад

      I think you just have to add autoincrement attribute when specifying the id column:
      eg:
      id = Column(Integer, primary_key=True, autoincrement=True)

  • @MartinSh429
    @MartinSh429 Год назад

    I work with pycharm for my classes, but never tried to create a database in pycharm. is that something that I have to add to pycharm? I have to use to PgAdmin everysingle time and use postgres

  • @A.Mercier
    @A.Mercier 7 месяцев назад

    re-writing __init__ function is useless if you don't implement custom behaviors within it and is only prone to raise errors

  • @al-edrisy1129
    @al-edrisy1129 11 месяцев назад

    sorry but how did you open the database in pycharm ?

  • @codebusters007
    @codebusters007 Год назад

    This is a really helpful video! Do you use some sort of a plugin to view the database inside PyCharm? :)

    • @dijla_younis
      @dijla_younis Год назад

      On vs code i use sqlite viewer to view the database

  • @bakasenpaidesu
    @bakasenpaidesu Год назад +1

    Need SQLModel tutorial becz itz hard to find... the one already exist doesn't help me at all ...

  • @RobdarkRobdark
    @RobdarkRobdark Год назад

    Can I use the dataclasses to simplify the class definition ?

  •  Год назад

    thx

  • @BathingAfrican
    @BathingAfrican Год назад

    could you do a odoo tutorial?

  • @silentgaming678
    @silentgaming678 Год назад

    What is the use of the representation function i did not understand. Can anyone explain?

    • @patinronin2991
      @patinronin2991 9 месяцев назад

      When You print a object in python it prints in the screen the result of rep method, You can Overdrive this method inside your class to print what You want.

  • @MichaelDeBusk
    @MichaelDeBusk Год назад +23

    "Persons" is indeed a valid English word, and would be the more appropriate choice for the database.

  • @user-jc3wh8sf8o
    @user-jc3wh8sf8o 4 месяца назад +1

    great

  • @SkyFly19853
    @SkyFly19853 Год назад

    Can it be used for video game development in Python?

    • @ptichiy-krik
      @ptichiy-krik Год назад +1

      Yes, of course. You can use this for an easier way to read and write persistent data. Fast-changing data, such as the position of an opponent, is stored in RAM, while slower-changing and longer-term data, such as a high score table, is stored in a database. To work with the database, you can use SQAlchemy

    • @SkyFly19853
      @SkyFly19853 Год назад

      @@ptichiy-krik
      And that's what I am interested in.
      Thank you for your explanation.

  • @premmanu6557
    @premmanu6557 Год назад

    Can you do a vid on how to build a neural network to extract data from a lisence

    • @patinronin2991
      @patinronin2991 9 месяцев назад +1

      You can use object character recognition (ocr) i don't remember what's the name of the package in python

  • @christiankoch4627
    @christiankoch4627 Год назад

    I prefer querys it is faster for large and complex databases

  • @akartaltepe
    @akartaltepe Год назад

    Is sqlalchemy usable with @dataclass?

  • @igorgrbaslijev8593
    @igorgrbaslijev8593 8 месяцев назад

    SQL - Squeel

  • @snippletrap
    @snippletrap 9 месяцев назад

    "persons" is valid English, just a bit unusual

  • @philtoa334
    @philtoa334 Год назад

    Thx_.

  • @robertmazurowski5974
    @robertmazurowski5974 9 месяцев назад

    Can you say squeal?

  • @funbioj
    @funbioj 8 месяцев назад

    persons is english by the way

  • @matthiasbirling6141
    @matthiasbirling6141 11 месяцев назад

    Did you just assume Anna Blue's gender

  • @richardmohan1037
    @richardmohan1037 Год назад

    First