Π£ Π½Π°Ρ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΠΎ ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½Π°Ρ SQLAlchemy 2.0 | alembic ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ | ΠΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π±Π»ΠΈΡΠ°ΠΌΠΈ | ΠΠ΅ FastAPI | ΠΠΈΠ΄Π΅ΠΎ 3 ΠΈΠ»ΠΈ ΡΠΊΠ°ΡΠ°ΡΡ Π² ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΌ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠΌ ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅, Π²ΠΈΠ΄Π΅ΠΎ ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ»ΠΎ Π·Π°Π³ΡΡΠΆΠ΅Π½ΠΎ Π½Π° ΡΡΡΠ±. ΠΠ»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ Π²Π°ΡΠΈΠ°Π½Ρ ΠΈΠ· ΡΠΎΡΠΌΡ Π½ΠΈΠΆΠ΅:
ΠΡΠ»ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΡΠΊΠ°ΡΠΈΠ²Π°Π½ΠΈΡ Π½Π΅
Π·Π°Π³ΡΡΠ·ΠΈΠ»ΠΈΡΡ
ΠΠΠΠΠΠ’Π ΠΠΠΠ‘Π¬ ΠΈΠ»ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΡ
ΠΡΠ»ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠΎ ΡΠΊΠ°ΡΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ Π²ΠΈΠ΄Π΅ΠΎ, ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ° Π½Π°ΠΏΠΈΡΠΈΡΠ΅ Π² ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ Π²Π½ΠΈΠ·Ρ
ΡΡΡΠ°Π½ΠΈΡΡ.
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΡΠ²ΠΈΡΠ° ClipSaver.ru
Π ΡΡΠΎΠΌ ΡΠΎΠ»ΠΈΠΊΠ΅ ΡΡΡΡ-ΡΡΡΡ ΠΏΠΎΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ Ρ FastAPI ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΡΠ΄Π΅Π»Π°Π΅ΠΌ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ (Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ pydantic), Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΡΠ΄Π΅Π»ΠΈΠΌ ΡΠ²ΡΠ·ΡΠΌ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π±Π»ΠΈΡΠ°ΠΌΠΈ (one-to-one ΠΈ one-to-many), ΠΌΠΈΠ³ΡΠ°ΡΠΈΡΠΌ ΡΡ Π΅ΠΌ ΠΈ Π·Π°ΠΏΡΠΎΡΠ°ΠΌ Π² Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ (ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΡ ΡΠ΅ΡΠ΅Π· where, ΠΏΠΎΠ΄Π³ΡΡΠ·ΠΊΠ° ΡΠ΅ΡΠ΅Π· joinedload ΠΈ selectinload) ΠΠΈΠ΄Π΅ΠΎ β3 ΠΈΠ· ΡΠ΅ΡΠΈΠΈ ΡΠΎΠ»ΠΈΠΊΠΎΠ² ΠΏΡΠΎ FastAPI, Π½ΠΎ ΠΏΡΠΎ FastAPI ΡΡΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½ΠΈΡΠ΅Π³ΠΎ ΠΈ Π½Π΅Ρ. ΠΠΎΠ΄ ΡΡΡ https://github.com/mahenzon/micro-sho... ΠΠΎΠ΄Π΄Π΅ΡΠΆΠ°ΡΡ Π²ΡΡ ΠΎΠ΄ ΡΠΎΠ»ΠΈΠΊΠΎΠ² (Π·Π°ΡΠΏΠ»Π°ΡΠ° ΠΌΠΎΠ½ΡΠ°ΠΆΠ΅ΡΡ) ΡΠ΅ΡΠ΅Π· Tinkoff https://tinkoff.ru/cf/6kbKWtKhapM ΡΠ΅ΡΠ΅Π· CloudTips https://pay.cloudtips.ru/p/9a8fa641 Π‘ΡΡΠ»ΠΊΠΈ Π½Π° ΡΠΎΡΡΠ΅ΡΠΈ: ΠΠ°Π±Π»ΠΈΠΊ Π² ΠΠ https://vk.com/surenkhorenyan YouTube: Β Β Β /Β @surenkhorenyanΒ Β RuTube https://rutube.ru/channel/29899055/ ΠΠ°Π½Π°Π» Π² Π’Π https://t.me/Khorenyan ΠΠ΅ΡΠΊΠΈ: ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΠΉΡΠ΅ ΠΌΠ΅ΡΠΊΠΈ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ π ΠΠ΅ΡΠ²ΡΠΌ ΠΌΠ΅ΡΠΊΠΈ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΠ» ΠΠΈΡΠ°Π»ΠΈΠΉ Π’ΠΎΠ»ΠΌΠ°ΡΠ΅Π², ΡΠΏΠ°ΡΠΈΠ±ΠΎ Π΅ΠΌΡ! 00:00 ΠΠ°ΡΠ°Π»ΠΎ 00:10 ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Alembic 01:35 Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Alembic 01:55 ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Alembic 8:35 Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ 14:24 ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΡΠΊΠ°Ρ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΉ 18:00 Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ User 21:18 Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ Post 22:00 ΠΠ½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ 23:02 Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ ΠΊΠ»ΡΡΠ° 25:51 ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ²ΡΠ·Π΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΠΎΠ΄Π΅Π»ΡΠΌΠΈ (relationship) "ΠΎΠ΄ΠΈΠ½ ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌ" ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ TYPE_CHECKING 29:42 Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Profile, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ²ΡΠ·Π΅ΠΉ "ΠΎΠ΄ΠΈΠ½ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ" 31:48 ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Mixin (Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ declared_attr) Π΄Π»Ρ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΡ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ΄Π° 40:22 Π‘Π»Π΅ΠΆΠ΅Π½ΠΈΠ΅ Π·Π° Π²Π΅ΡΡΠΈΡΠΌΠΈ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΉ 42:52 create_User 44:52 ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ 46:18 ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³ config.py 48:01 ΠΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Π»Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ ΠΠ 48:17 get_User (Π΄Π²Π° Π²Π°ΡΠΈΠ½ΡΠ°) 51:43 create_Profile 54:10 show_Users_with_Profiles 55:44 ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ options(joinedload()) 58:10 create_Post 1:01:18 get_Users_with_Posts 1:02:41 ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ .unique ΠΈ options(selectinload()) 1:06:27 get_Post_with_Users 1:08:24 get_User_with_Posts_and_Profile 1:10:22 get _Profile_with_User_and_Posts - Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ join() (Π΄Π»Ρ ΠΏΠΎΠ΄Π³ΡΡΠ·ΠΊΠΈ Π΄Π°Π½Π½ΡΡ ΠΈ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ ) 1:13:31 ΠΈΡΠΎΠ³ΠΈ