SQLite Databases With Python - Full Course

Поделиться
HTML-код
  • Опубликовано: 24 дек 2024

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

  • @byleexs1991
    @byleexs1991 2 года назад +86

    Cursors in sqlite3 python are objects that act as a pointer to the results of a query. They enable you to fetch, add, modify or delete data from a database. The cursor can also be used to traverse through the rows of a query result.

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

    Didn't know Walter white was so good at teaching sqlite! Great video!

  • @Ricocase
    @Ricocase 4 года назад +56

    He already created a time outline of specific concepts in the video = instant upvote!
    Down-to-earth explanations > boss move!

  • @redfordwilson5042
    @redfordwilson5042 4 года назад +708

    I didn't know Walter White was also skilled in programming. Cool!

    • @hellelo.5840
      @hellelo.5840 4 года назад +29

      I am the danger, Walter said while talking to his wife about hacking

    • @zl7289
      @zl7289 4 года назад +8

      This comment deserves more likes! 😂

    • @ShaileshKumar-fk8cu
      @ShaileshKumar-fk8cu 4 года назад +3

      Hahahahahahahaha

    • @ayushjadaun4964
      @ayushjadaun4964 4 года назад +1

      Maybe he is planning to hack Pentagon. This time

    • @CavanLeeSears
      @CavanLeeSears 4 года назад +5

      You'll notice that almost every skilled programmer is a bald be-speckled goatie (stubble too) wearing guy. Including myself. :)

  • @dexternepo
    @dexternepo 4 года назад +2

    At 37:21 he mispronounces tuple as "toople" and then corrects himself after immediately remembering the correct pronunciation. As a non-native speaker of English from India, this brings a smile to my face. Because this is exactly what we do at times. When we learn English from textbooks, we have our pronunciation for some words, and then after watching native speakers pronounce it differently we try to remember the correct pronunciation. But still end up pronuncing it the way we first learned it in spite of knowing the correct way. The word that immediately comes to my mind that I personally mispronounce is "environment".

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

    Thanks John, this was really helpful. Just want to note something I got hung up on; if you delete the last row in a table, that rowid will be REUSED when you add a new item to the table UNLESS you use the AUTOINCREMENT keyword. In other words, if the last rowid is 6, and you delete it (and all of that person's data)... then the last rowid is 5. But, if you add a new item, the new person's data will be added to a row that ALSO has the rowid of 6. This can cause issues when referencing data by rowid later on.

  • @GameKnightOTRT
    @GameKnightOTRT 11 месяцев назад +4

    This is an older video but i found it very helpful so thank you first off! Secondly, if any of you are using VS Code instead of sublime you will need to make sure you are physically inside of the folder through the explorer tab. Once inside select the sqlite folder then go to git bash and follow his steps from there!

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

      Bro how to run vscode instead of sublime please give proper steps

  • @026maheshkumars7
    @026maheshkumars7 Год назад +1

    I have finished this course...I have enjoyed every second in this course and i have learned lot of details... thankyou very much..

  • @dimjim2365
    @dimjim2365 2 года назад +4

    Wow, just wow. This is one superb course for beginners like myself. I followed the whole instructions and created an employees db. I reached a little far trying to incorporate nulls and blobs which caused me probs at the end. Ha. Had to drop back to the text and email demos but everything worked the first time after I corrected my typos. Ha. Thank you for a marvelous tutorial!

  • @myriamt6340
    @myriamt6340 3 года назад +6

    WALTER WHITE teaching me SQLITE, what a time to be alive :D

  • @medimarsh2376
    @medimarsh2376 3 года назад +1

    in spite of all unfair comments, I have to say perfect video. Thanks!!!

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

    He is enjoying himself.. he doesn't want the output to be displayed... What a gamer!!!!!

  • @MahdeenSky
    @MahdeenSky 4 года назад +6

    this is very easy to understand, good job, very few sqlite3 tutorials actually show the syntax of the sql knowledge and doesn't assume we learned the sql language beforehand, and this is one of them. Fantastic!

    • @MahdeenSky
      @MahdeenSky 4 года назад +1

      may i ask how do i move on from this tutorial into more functional sql?

    • @atomic_cow
      @atomic_cow 2 года назад +1

      @@MahdeenSky howd it go

  • @jimcallahan448
    @jimcallahan448 2 года назад +1

    Made sense to me, but that was because I already knew SQL and the SQLite command line.
    Might be easier to demonstrate SQLite command line and then ask what if we want to do this as part of a larger Python program? At the SQLite command line one can immediately demonstrate the newly created table with:
    SELECT customers *;
    If a student asks, why not do everything in SQL? Ask the student, "What if you want to graph the data?" SQL doesn't have matplotlib or even the tools to produce a formatted report. So, Python and SQL (SQLite) make a good team.

  • @Vhoover3609
    @Vhoover3609 4 года назад +19

    Hint: the print function accepts multiple arguments where each one is separated by a space when printed. I.e. print( item[0], item[1]) will print Jon Elders to the screen.

  • @Lennardish
    @Lennardish 2 года назад +1

    Hello John,
    I worked on a program that asks the number of records to be inserted:
    import sqlite3
    conn = sqlite3.connect('student.db')
    #create a cursor
    c = conn.cursor()
    vnaam = ' '
    #Inserting records
    aant = int(input('Number of records to be inserted'))
    for x in range(aant):
    vnaam = input("First name? :")
    anaam = input("Surname? :")
    rek = input("Arithmetic score :")
    taal = int(input("Language score :"))
    studenten = [
    (vnaam, anaam, rek, taal)
    ]
    c.executemany("INSERT INTO studenten VALUES (?,?,?,?)", studenten)
    print("Inserted")
    #Commando uitvoeren
    conn.commit()
    #afsluiten!
    conn.close()
    And it works :) (Thanks to your clear way of instructing us :)

  • @aidynskullz4139
    @aidynskullz4139 4 года назад +10

    What kind of witch sorcery is this channel? As soon as I need to learn something for a project, a new course is released on the topic. This is insane and might be the tenth time it's happening.
    Keep up the good work!!!

    • @freecodecamp
      @freecodecamp  4 года назад +26

      When deciding what course to post, our first thought is always "What does Aidyn Skullz need to learn right now?" 😀

    • @aidynskullz4139
      @aidynskullz4139 4 года назад +4

      @@freecodecamp haha LOL. Thanks for replying though XD.

    • @euphoric-therapeuticmusic5374
      @euphoric-therapeuticmusic5374 3 года назад +1

      @@freecodecamp so you guys have everything ready? why not post all of them.

  • @tzwacdastag8223
    @tzwacdastag8223 4 года назад +35

    ⭐️Course Contents ⭐️
    ⌨️ (0:00:00) What Is A Database
    ⌨️ (0:03:39) Install Python
    ⌨️ (0:07:07) Install Git Bash Terminal
    ⌨️ (0:11:52) Connect to Database in Python
    ⌨️ (0:17:39) Create A Table
    ⌨️ (0:28:13) Insert One Record Into Table
    ⌨️ (0:31:25) Insert Many Records Into Table
    ⌨️ (0:34:41) Query and Fetchall
    ⌨️ (0:37:02) Format Your Results
    ⌨️ (0:44:39) Primary Key
    ⌨️ (0:47:51) Use The Where Clause
    ⌨️ (0:51:17) Update Records
    ⌨️ (0:56:42) Delete Records
    ⌨️ (0:58:27) Order Results
    ⌨️ (1:01:37) And/Or
    ⌨️ (1:04:57) Limiting Results
    ⌨️ (1:07:27) Delete (Drop) A Table And Backups
    ⌨️ (1:09:14) Unit 18 Our App - Show All Function
    ⌨️ (1:14:16) Unit 19 Our App - Add A Record Function
    ⌨️ (1:17:51) Unit 20 Our App - Delete a Record Function
    ⌨️ (1:21:23) Unit 21 Our App - Add Many Records Function
    ⌨️ (1:24:57) Unit 22 Our App - Where Clause Function

    • @ferax4598
      @ferax4598 2 года назад +3

      nice job copying the description

  • @benwards7398
    @benwards7398 2 года назад +3

    In the delete section:
    Don''t convert the id to string in the app.py file instead convert it into an iterable by
    c.execute("DELETE FROM customers WHERE rowid = (?)", [id])
    or
    c.execute("DELETE FROM customers WHERE rowid = (?)", (id,))
    Thanks for the good video.

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

    very good instructor, of course you will need to know some python before you watch this video

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

    What a CrashCourse man!!
    AWESOME!!

  • @uucea
    @uucea 4 года назад +87

    This is the type of channel that will mold the next Bill Gates
    Few of us watching will create something revolutionary

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

    c.execute("INSERT INTO Customers VALUES (?,?,?)", (List))
    sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 3, and there are 2 supplied.
    I've rewound the video like dozens of times now and watched it. Finally I noticed that I'm using execute() instead of executemany(). c.executemany("INSERT INTO Customers VALUES (?,?,?)", List) now it works.

  • @tymothylim6550
    @tymothylim6550 3 года назад +29

    Thank you John for this video! I watched the whole thing and it was really a well-planned lesson! This really helps me grasp the basics for sqlite3!

  • @dragonarch0
    @dragonarch0 4 года назад +91

    Me thinking about learning python
    RUclips : I see you wanna learn python,here you go

  • @pipedreamsnetwerk5110
    @pipedreamsnetwerk5110 2 года назад +1

    This was awesome. I was trying to figure out sqlite3. Thanks!!!

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

    thanks alot that was such an awesome video to learn basics about sql lite with python

  • @pkavenger9990
    @pkavenger9990 4 года назад +3

    i love his style of teaching: "So guys what is SQL? I don't know.....................

  • @johndoe-rq4gf
    @johndoe-rq4gf 3 года назад +2

    Hi! just a remark: contrary to what you say in the first part, SublimeText is free for evaluation but if you do read the little popup window (or the website) you have to buy a license for continuous usage, it's not a donation, it's a license.

  • @ghitanovandenlangenbergh5882
    @ghitanovandenlangenbergh5882 2 года назад +1

    Learnt a lot from this video. The only thing I didn't get is how to reset your rowid after you have deleted something

  • @junioradi6554
    @junioradi6554 4 года назад +3

    Super and simple course which permits to understand the use of database into an application written using Python. Thank you sir

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

    Really easy to follow along course loved the simple explanation thankyou

  • @srinjoyghosh7273
    @srinjoyghosh7273 3 года назад

    I saw his TKinter playlist too. Amazing teacher !

  • @Lucaischz
    @Lucaischz 4 года назад +12

    As far as I know, docstrings aren't the same as triple quote strings. Docstrings are indeed expressed on tripple quote strings, but it means something more specific, which is the on code documentation for classes and functions, actually working as source code comments, but the syntax accepts this particular case because it's industry standard.
    Edit: also, as far as I know, SQL is case INSENSITIVE, actually, but it's good practice to capitalize reserved words to distinguish it from context defined elements (names, parameters, etc).

    • @pepijnkrijnsen4
      @pepijnkrijnsen4 3 года назад +2

      Six months later but you're absolutely right

  • @anzhelazenaishvili7380
    @anzhelazenaishvili7380 4 года назад

    Hello ,I am starting to learn Data science,so I am beginer and this course it's very good for beginers,thank you very much!!!

  • @Meta910
    @Meta910 3 года назад +1

    AMAZING....#just got re-candled again😊

  • @FlowGrapher
    @FlowGrapher 4 года назад +1

    Just started a new project in React-Native this SQLite course will help a lot for mobile dev. Thanks 🙏

  • @OnDoitConnaitre
    @OnDoitConnaitre 4 года назад +2

    This Course is really easy to follow and super useful for people who want to start using SQLite, but I wanted to understand 'JOIN' concept which is not explained neither mentioned here, so i guess I will look for some more content.

  • @utkarshrastogi8791
    @utkarshrastogi8791 4 года назад +2

    Massive respect for these guys

  • @franfurey
    @franfurey 2 года назад +2

    Amazing course! such a big teacher and explanation method!

  • @miltondias6617
    @miltondias6617 2 года назад +1

    Very simple and straight forward. Congrats!

  • @amirmohammadyazdani6929
    @amirmohammadyazdani6929 3 года назад +1

    Teacher: Say my name
    We: Heisenberg
    Teacher: YOU GOT DAMN RIGHT !

  • @zainabbasmerchant9650
    @zainabbasmerchant9650 3 года назад +1

    Better than my college professor thanks a lot ✌

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

    JESSIE WE NEED TO CREATE A METH CUSTOMER DATABASE

  • @splungedude
    @splungedude 4 года назад +4

    1:29:36 if you use:
    id = str(id) in the delete_one function the input will be converted to an interger

  • @pleabargain
    @pleabargain 3 года назад +5

    I worked through all of the code examples. Thank you! I have learned a lot!

  • @TURKISTONIM2
    @TURKISTONIM2 2 года назад

    The best video course i will enrol on 👍👍👍👍👍👍

  • @Lennardish
    @Lennardish 2 года назад

    Hello John, I followed closely your instructions in using tkinter and making a database. I changed your example a bit, in that I only ask for a first name and underneath that a number of entry boxes in which scores on some test can be filled in.
    Two questions:
    1. How to get the results in some listbox or something like that
    2. How can I send the results to a printer.
    This printer thing a a huge challenge for me :)
    Thank you for your fantastic video's !!

    • @BabaBoota-lg2pq
      @BabaBoota-lg2pq Год назад

      you can execute this query SELECT * FROM [table name]
      and then you can just use this method fetchall() on the cursor while assigning it to a variable and now your variable simply contains a list of tuples and each tuple contains values of each row corresponding to the column names.

  • @vasileantoniupop5476
    @vasileantoniupop5476 2 года назад

    First helpful tutorial on this topic

  • @sambidao88
    @sambidao88 2 года назад

    Thank you! The author made me understand to use Python that do CRUD a database incredibly

  • @shrishailgharat1964
    @shrishailgharat1964 4 года назад +3

    John hope you are eating well and are healthy. Really loved the course. Thanks for the video and keeping it simple and short.

  • @johannesperez9548
    @johannesperez9548 3 года назад +2

    Thanks John! Super useful! I learned a lot!!!

  • @boa2145
    @boa2145 3 года назад

    Hi John, I watched all clips. Thx for your full course "Sqlite databases with Python". Well done!!!

  • @EpicGamer-ux1tu
    @EpicGamer-ux1tu 2 года назад

    Great video mate, I learned SQL and sqlite3 from you, thanks

  • @draganmilinov7495
    @draganmilinov7495 3 года назад +1

    Thank you very much on this video!
    It helped me.
    I'm beginner in programming.
    Python is my first programming language.

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

    You are amazing and you are way of teaching is brilliant and time saving

  • @cloudtechhills
    @cloudtechhills 2 года назад +2

    I appreciate your work on this tutorial. Thanks mate!

  • @shivangivishwasrao1983
    @shivangivishwasrao1983 2 года назад +6

    Simply loved how crisp and to the point this course was. Thank you so much!

  • @vanshatcode
    @vanshatcode 4 года назад +8

    Thanks a lot for this, seriously you are an incredible teacher.

  • @sabilislam7629
    @sabilislam7629 4 года назад

    You Rock I roll... Seriously, This guy's videos are most helpful in the entire RUclips!

  • @drendelous
    @drendelous Месяц назад

    1:21:03 it worked with '6' as 🐍 doesnt treat 6 as a sequence (and we need to pass a sequence for: .execute(..., here). '6' is iterable and it handled the issue

  • @aniruddhakulkarni700
    @aniruddhakulkarni700 4 года назад +4

    Thank you for this Walter!

  • @shedquality
    @shedquality 3 года назад +2

    If you're having trouble with this part of deleting a query with a rowid over 9 then look below
    c.execute("DELETE from customers WHERE rowid = (?)", id)
    It's because when you call the function
    database.delete_one('10')
    You will get the error " Incorrect number of bindings supplied. The current statement uses 1, and there are 2 supplied."
    to fix this, change
    rowid = (?)", id)
    to
    rowid = (?)", [id])
    allowing
    database.delete_one('10') to work with double digits and more
    You no longer need to pass the function argument as a string - database.delete_one(10) will now work WITH or WITHOUT converting the numbers to string

    • @DiscordCriminal
      @DiscordCriminal 3 года назад +1

      thank you

    •  3 года назад +1

      thx

  • @le_moski
    @le_moski 4 года назад +8

    1:02:43 Epic bruh moment
    Excelent video btw

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

    Clicking the like button at the start of the video is like tipping before you get your food.

  • @gamesandstuff7724
    @gamesandstuff7724 2 года назад +1

    Many thanks, great video!

  • @juanopenx
    @juanopenx 2 года назад +6

    It would be good to show readonly vs read+write connections to the sqlite3 database file, which comes in handy if you're creating a flask web app which will be used by multiple individuals at once.

  • @nepsetraderspro
    @nepsetraderspro 3 года назад

    Everyboy making only user database in whole RUclips video nobody make table for math calculations like account application income expense project
    But i applicate your work ❤️

  • @outofahat9363
    @outofahat9363 2 года назад +1

    Just discovered SQLite (Im already familiar with Maria/MySQL, Oracle, PostgreSQL) and im really digging it. Only one very easily portable .db file THATS IT thats the whole database. I love how little and compact and cute it is

    • @KingdomCre8tive
      @KingdomCre8tive 2 года назад +1

      You'll never get a job in it

    • @outofahat9363
      @outofahat9363 2 года назад +1

      @@KingdomCre8tive I don't need to, I'm a junior DBA i mostly deal with oracle, MySQL and postgres but in my spare time i like to experiment with other stuff and I found SQLite really neat.

  • @OlivierSuire
    @OlivierSuire 4 года назад +1

    17:44 it seems to me that databases really start making sense when they are comprised of MULTIPLE tables.
    I wish you would have touched this subject. Other than that : fantastic video ; it really helped.

  • @gabrielade775
    @gabrielade775 2 года назад

    Great hands on course, thank you John

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

    Really helpful Video
    Made the bridge of knowledge which I needed from a long time
    One more time thank you

  • @espressobuzz1253
    @espressobuzz1253 3 года назад +2

    Surprised that value passed to query has to be a tuple. This does not work: cursor.execute("SELECT * FROM customers WHERE firstname=?", customer_first_name)

  • @mr.dineshlee
    @mr.dineshlee 4 года назад +1

    Very Easy to Understand this one...🙏🏻

  • @shivomsrivastava6540
    @shivomsrivastava6540 4 года назад +2

    Nice tutorial, Mr. Anupam Kher

  • @vectoralphaSec
    @vectoralphaSec 10 месяцев назад +2

    I dont know if you would answer any questions here on this specific video, most likely not, but ill ask anyway. I was wondering if SQLite would be ok to use in production as the default database for a small project? Im building a small web app in Django as a reference/ educational site and have a database of at most 50 records. I dont have the option for users or allowing user data so the database wont grow, it will stay at 50 rows. Is this ok for SQLite as my main database for my django project or should it only be used for development and instead use MySQL/ PostgreSQL?

  • @girishjain9330
    @girishjain9330 2 года назад

    Good explanation sir Thnks a lot 😊😊😊😊

  • @noir371
    @noir371 3 года назад

    Really appreciate everything this channel does!

  •  4 года назад +53

    Great tutorial You really dont need a college just RUclips is enough✌

    • @Deathwisher069
      @Deathwisher069 4 года назад +6

      Or maybe just the channels like freecodecamp 👍

    • @usamanadeem8504
      @usamanadeem8504 4 года назад +8

      damn true but youtube don't gives degree. hahaha

    • @dearstats6100
      @dearstats6100 4 года назад +3

      @@usamanadeem8504 with a degree if you can't do anything that is worst than not having a degree but skill

    • @usamanadeem8504
      @usamanadeem8504 4 года назад +2

      @@dearstats6100 and i am thinking what kind of the education system would be of a person if he/she got degree but don't have skills.

    • @rushikesh8132
      @rushikesh8132 4 года назад +1

      @@usamanadeem8504 Well If that degree is gonna cost thousands of dollars . I am better of only with the skills !

  • @a_b_c_wan_2_33
    @a_b_c_wan_2_33 3 года назад

    This video is incredible.

  • @espressoshot21
    @espressoshot21 4 года назад +8

    Thank you for this super helpful video! Keep up the awesome work. I've been really enjoying your courses on RUclips. You're such an awesome instructor!

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

    Thank you for publishing this video and teaching smoothly .....very practical and useful 👌

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

    Really easy to understand course. Some very useful bits in there. Thanks John!

  • @YilmazDurmaz
    @YilmazDurmaz 4 года назад +1

    at 1:26:15
    took me half a day to understand that little "quirk" of comma in "(email,)"
    and found out that it is also possible to write "[email]" as both cases returns an iterable.

    • @tonyfremont
      @tonyfremont 4 года назад

      I'm really scratching my head 9n passing rowid as a string, and then it "just works". Stuff like this drives me crazy. I guess it's no worse than perl and the way it used the context of what it was seeing in the code instead of following a strict syntax grammar. perl can produce incredible results, but things written in it are pretty much unmaintainable. A write-only language. ;)

    • @YilmazDurmaz
      @YilmazDurmaz 4 года назад

      @@tonyfremont I am not sure if your comment should be under mine. but It seems what you mentioned is about parameter type of sqlite's execute function.
      I find it interesting and tried 2 changes, one is the I mentioned in my comment: send an integer rowid, as we normally would do, into delete function use it inside as either "(id,)" or "str(id)" in execute function.

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

    Thank you so much John for the lesson! Your calm natural way of teaching is great!

  • @rahulgovindkumar3105
    @rahulgovindkumar3105 3 года назад +1

    Thank you for this super helpful video!

  • @usmantariq5615
    @usmantariq5615 2 года назад

    Excellent dude.. Very good course for beginners.

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

    Thank you so much, such a good explanation 😊

  • @Ishaan_Garud
    @Ishaan_Garud 4 года назад +3

    I am only 10 years old , but Understood everything easily

    • @spodarman3823
      @spodarman3823 4 года назад

      oh wow! i started coding at 12
      ur lucky u got started early

    • @spodarman3823
      @spodarman3823 4 года назад

      im 15 rn

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

    Thank you so much for this video, it was well planned and really helped me!!!

  • @Samiullahjaved-y2z
    @Samiullahjaved-y2z Год назад

    Thank you for this great course...

  • @ilyastrojnov7627
    @ilyastrojnov7627 4 года назад

    Thx for video! I think that best way for use database functions is optional args connection, we just create one connection and use it in all functions

  • @brianburch8062
    @brianburch8062 3 года назад

    Ah, thank you. This video cleared up a lot of things I was confused about.

  • @razredge07
    @razredge07 3 года назад +2

    Used 64 bit version of Python and world did not implode. So, hopefully everything will continue to be ok.

  • @husrad69
    @husrad69 3 года назад +1

    Thank you for this super helpful video! just one thing, normally you do not work with the Rowid!!! first, you have to search it! Second, you cannot delete Record with two digits in this way (like Record 10 or 15). the (?) takes only one number ('n').

    • @xgx6757
      @xgx6757 3 года назад +2

      9 months later but use a dictionary key instead of (?) tuple

    • @George-hj6qm
      @George-hj6qm 2 года назад +2

      or use ...rowid=(?)", (id,))

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

    thank you for upload this video, very educational.

  • @waqarfk
    @waqarfk 4 года назад +1

    Awesome content Guyz....🔥

  • @avijitdebnath2066
    @avijitdebnath2066 4 года назад +3

    You are amazing . Doing such a great job. I don't know how could I express my opinion to you! I don't know you believe in god or not. But I wish that god bless you. I feel like you are giving food to the poor hungry learners without asking money. Thank you again.

  • @RC-qi6hs
    @RC-qi6hs 4 года назад +40

    Thanks to RUclips, im gonna complete my bachelor's before end of my 2nd semester of college 😂😂✌️

  • @kanwaradnan4849
    @kanwaradnan4849 3 года назад

    Magician👏👏