یک چیزی که من خیلی زیاد میبینم مخصوصا تو community خودمون اینه که اکثر مواقع سوال ها بدون context پرسیده میشن. و این context خیلی میتونه تو جواب سوال تاثیر داشته باشه. بذارین مثال بزنم:
سلام من میخوام پایتون یاد بگیرم. میشه بهم ۵ تا کتاب معرفی کنید؟
اوکی تخصصتون چیه؟بک اند کار میکنید؟ ML؟ دوآپسین و دنبال یک زبون اسکریپتی هستین؟ دیتا اینجینر هستین؟ از پایتون چه یوزکیسی دارین؟! چقدر الان بلدین؟ چیا بلدین؟ این رو جواب سوال تاثیر میذاره. ممکنه جواب رو ۱۸۰ درجه بچرخونه. مثلا یک مثال دیگه.
سلام من از playwright یا سلنیوم استفاده میکنم. میخوام یک element رو سلکت کنم. بنظرتون از چه سلکتوری استفاده کنم؟css selector یا xpath یا .. ؟
اگه QA باشین, من میگم css selector بهتره. با پراپرتی test-id تو html که اصلا برای همین کار خلق شده. چرا؟ چون خودتون HTML رو کنترل میکنید و به فرانت میتونید بگین تغییر بده.
ولی اگه دارین اسکرپ میکنید یک سایتی رو, اون موقع xpath selector بهتره. چون احتمال تغییر یک element صفحه html ای که خودتون کنترل میکنید با xpath خیلی کمتره تا با سلکتور. مثلا اگه فرانت از Material UI استفاده میکنه اصلا استفاده از سلکتور خیلی سخت تر میشه. ولی شما با xpath میتونید query های خیلی پیشرفته و پیچیده تری بنویسید. مثلا رو دکمه ای که داخل متنش "login" هست کلیک کن! این query همیشه جواب میده تا زمانی که design ux صفحه کلا تغییر کنه.
پس همیشه بنظرم وقتی سوال میپرسین کامل context بدید. اشکال نداره سوالتون ۴-۵ خط طولانی تر شه ولی جواب درست تری دریافت خواهید کرد.
@PyBackendHub
سلام من میخوام پایتون یاد بگیرم. میشه بهم ۵ تا کتاب معرفی کنید؟
اوکی تخصصتون چیه؟بک اند کار میکنید؟ ML؟ دوآپسین و دنبال یک زبون اسکریپتی هستین؟ دیتا اینجینر هستین؟ از پایتون چه یوزکیسی دارین؟! چقدر الان بلدین؟ چیا بلدین؟ این رو جواب سوال تاثیر میذاره. ممکنه جواب رو ۱۸۰ درجه بچرخونه. مثلا یک مثال دیگه.
سلام من از playwright یا سلنیوم استفاده میکنم. میخوام یک element رو سلکت کنم. بنظرتون از چه سلکتوری استفاده کنم؟css selector یا xpath یا .. ؟
اگه QA باشین, من میگم css selector بهتره. با پراپرتی test-id تو html که اصلا برای همین کار خلق شده. چرا؟ چون خودتون HTML رو کنترل میکنید و به فرانت میتونید بگین تغییر بده.
ولی اگه دارین اسکرپ میکنید یک سایتی رو, اون موقع xpath selector بهتره. چون احتمال تغییر یک element صفحه html ای که خودتون کنترل میکنید با xpath خیلی کمتره تا با سلکتور. مثلا اگه فرانت از Material UI استفاده میکنه اصلا استفاده از سلکتور خیلی سخت تر میشه. ولی شما با xpath میتونید query های خیلی پیشرفته و پیچیده تری بنویسید. مثلا رو دکمه ای که داخل متنش "login" هست کلیک کن! این query همیشه جواب میده تا زمانی که design ux صفحه کلا تغییر کنه.
پس همیشه بنظرم وقتی سوال میپرسین کامل context بدید. اشکال نداره سوالتون ۴-۵ خط طولانی تر شه ولی جواب درست تری دریافت خواهید کرد.
@PyBackendHub
👍39
#واقعی دیدم chatgpt داون شده. رفتم پیج استتوسش. نوشته رفرش کنید درست میشه. 😂
- کار نمیکنه این چرا؟
+رفرش کن درست میشه
@PyBackendHub
- کار نمیکنه این چرا؟
+رفرش کن درست میشه
@PyBackendHub
🤣17🥰1🌚1👾1
این بدترین طرز فکریه که یک نفر میتونه داشته باشه، اینکه یک سری الاف (علاف؟) تو گیتهاب مجانی دارن کد میزنن. جدا از اینکه اون سری افراد چه درآمدی دارن که مهم نیست، اصلا طرز فکر اشتباهه.
سوال من اینه که شما مگه از یک ابزار اوپن سورس استفاده نمیکنی؟ کمترین contribution ای که میتونی داشته باشی اینه که اگه مشکلی میبینی تو اون ابزار، یک ایشو براش بذاری. این دیگه کمترین حالته.
همین مشکلم ممکنه خودت حل کنی. میتونی با شرکت هماهنگ کنی و همونو PR بدی بشی contributer.
و در نهایت این پروموشنی هست برای خودتون. من همین چند وقت با اینکه اصلا تمایلی نداشتم شرکتمو عوض کنم، ولی ۲ شرکت پروژه aioclock من رو دیده بودن خوششون اومد، و لطف کردن منو به مصاحبه دعوت کردن.(منظورم recruiter نیست)
خلاصه کسی که پروفایل گیتهابش مثل برف سفیده، بنظرم میتونه رد فلگ باشه!
@PyBackendHub
سوال من اینه که شما مگه از یک ابزار اوپن سورس استفاده نمیکنی؟ کمترین contribution ای که میتونی داشته باشی اینه که اگه مشکلی میبینی تو اون ابزار، یک ایشو براش بذاری. این دیگه کمترین حالته.
همین مشکلم ممکنه خودت حل کنی. میتونی با شرکت هماهنگ کنی و همونو PR بدی بشی contributer.
و در نهایت این پروموشنی هست برای خودتون. من همین چند وقت با اینکه اصلا تمایلی نداشتم شرکتمو عوض کنم، ولی ۲ شرکت پروژه aioclock من رو دیده بودن خوششون اومد، و لطف کردن منو به مصاحبه دعوت کردن.(منظورم recruiter نیست)
خلاصه کسی که پروفایل گیتهابش مثل برف سفیده، بنظرم میتونه رد فلگ باشه!
@PyBackendHub
👍55👎11
Python BackendHub
این بدترین طرز فکریه که یک نفر میتونه داشته باشه، اینکه یک سری الاف (علاف؟) تو گیتهاب مجانی دارن کد میزنن. جدا از اینکه اون سری افراد چه درآمدی دارن که مهم نیست، اصلا طرز فکر اشتباهه. سوال من اینه که شما مگه از یک ابزار اوپن سورس استفاده نمیکنی؟ کمترین contribution…
یک کامنتی گذاشتن که ظاهرا سو بداشت شده بود از حرفه من،
من نگفتم کسی که فعالیت گیتهاب نداره حتما رد فلگه. گفتم میتونه رد فلگ باشه. قطعا به عوامل دیگه هم بستگی داره.
و فعال بودن گیتهاب به این منظور نیست که پروفایل شما سبزه سبز باشه. ممکنه شما سالی ۵ تا ایشو بزنید و هیچ فعالیت دیگه ای نداشته باشین، ولی همون ۵ تا ایشو رو تو ابزار هایی که استفاده کردین ازش زدید و خیلی قشنگ مشکل رو توضیح دادید. این خیلی اسکیلارو میتونه نشون بده به کسی که داره رزومتون رو میبینه. این بنظره من بیشتر ارزش داره تا اینکه صرفا پروفایلتون سبز باشه. هدف رنگی کردن پروفایل نیست
@PyBackendHub
من نگفتم کسی که فعالیت گیتهاب نداره حتما رد فلگه. گفتم میتونه رد فلگ باشه. قطعا به عوامل دیگه هم بستگی داره.
و فعال بودن گیتهاب به این منظور نیست که پروفایل شما سبزه سبز باشه. ممکنه شما سالی ۵ تا ایشو بزنید و هیچ فعالیت دیگه ای نداشته باشین، ولی همون ۵ تا ایشو رو تو ابزار هایی که استفاده کردین ازش زدید و خیلی قشنگ مشکل رو توضیح دادید. این خیلی اسکیلارو میتونه نشون بده به کسی که داره رزومتون رو میبینه. این بنظره من بیشتر ارزش داره تا اینکه صرفا پروفایلتون سبز باشه. هدف رنگی کردن پروفایل نیست
@PyBackendHub
❤15👍8👎3
نسخه جدید aioclock هم منتشر شد 🔥
تغییرات این نسخه:
- اضافه شدن پشتیبانی برای تسک های sync . هر فانکشن sync توسط aioclock تو تردپول با anyio ران میشه. ولی این رو خوده فانکشنی که دکوریت کردین تاثیر نمیذاره و تبدیل به کوروتین نمیشه و همونطور که استفاده کردین میتونید انجام بدید.
- بهتر شدن داکیومنت. همراه با پشتیبانی از چند نسخه
داکیومنت
گیتهاب
ممنون میشم استار بدید یا contribute کنید.
@PyBackendHub
تغییرات این نسخه:
- اضافه شدن پشتیبانی برای تسک های sync . هر فانکشن sync توسط aioclock تو تردپول با anyio ران میشه. ولی این رو خوده فانکشنی که دکوریت کردین تاثیر نمیذاره و تبدیل به کوروتین نمیشه و همونطور که استفاده کردین میتونید انجام بدید.
- بهتر شدن داکیومنت. همراه با پشتیبانی از چند نسخه
داکیومنت
گیتهاب
ممنون میشم استار بدید یا contribute کنید.
@PyBackendHub
🔥19❤3
نسخه بعدی aioclock منتشر شد 👀
تغییرات این نسخه:
اضافه شدن تریگر Cron - با سینتکس cron میتونید راحت تریگر بنویسید.
اضافه شدن OrTrigger - میتونید تریگری بنویسید که شامل تریگر های دیگه میشه و هرکدوم زودتر نوبتشون شد اجرا میشن.
داکیومنت
گیتهاب
ممنون میشم استار بدید یا contribute کنید.
@PyBackendHub
تغییرات این نسخه:
اضافه شدن تریگر Cron - با سینتکس cron میتونید راحت تریگر بنویسید.
اضافه شدن OrTrigger - میتونید تریگری بنویسید که شامل تریگر های دیگه میشه و هرکدوم زودتر نوبتشون شد اجرا میشن.
داکیومنت
گیتهاب
ممنون میشم استار بدید یا contribute کنید.
@PyBackendHub
👍12❤4
Forwarded from Sadra Codes
اگه از FastAPI استفاده میکنید و سعی دارید MVP بیارید بالا (درحدی که منابع زیادی مورد نیاز نباشه) پلتفورمهای زیر Free Trial دارن و بدون پرداخت میتونید سرویس بکاندتون رو روشون بالا بیارید. داکیومنت و بلاگ هم در دسترس هست کافیه سرچ کنید.
1️⃣ - https://render.com/
2️⃣ - https://www.cyclic.sh/
3️⃣ - https://fly.io/
4️⃣ - https://leapcell.io/
5️⃣ - https://vercel.com/
1️⃣ - https://render.com/
2️⃣ - https://www.cyclic.sh/
3️⃣ - https://fly.io/
4️⃣ - https://leapcell.io/
5️⃣ - https://vercel.com/
Render
Cloud Application Platform | Render
On Render, you can build, deploy, and scale your apps with unparalleled ease – from your first user to your billionth.
👍17❤1
کسایی از chatgpt یک سوال میپرسن، یا یک کدی از استک اورفلو کپی پیست میکنن، توضیه میکنم بهشون حتما این مقاله زیر رو بخونید.
https://archive.ph/jRvwx
خلاصه بخوام بگم، کدشون رو داشتن از تایپ اسکریپت میبردن پایتون. مدل های دیتابیس رو دادن chatgpt از پریسما تبدیلش کنه به sqlalchemy. این وسط chatgpt برای یکی از مدل ها برای id مدل، به جای اینکه از دیفالت فکتوری استفاده کنه، از دیفالت استفاده میکرد. و اینطوری بود که اون مدل هروقت instance ای ازش ساخته میشد آیدی تکراری میشد. و دیتابیس ارور میداد. و این باگ باعث ضرر ۱۰ هزار دلاری به این شرکت شد. صرفا برای اینکه یکینمیدونست دیتاکلس توپایتون چطور کار میکنه و به جای خوندن داک از chatgpt پرسید 🙂
@PyBackendHub
https://archive.ph/jRvwx
خلاصه بخوام بگم، کدشون رو داشتن از تایپ اسکریپت میبردن پایتون. مدل های دیتابیس رو دادن chatgpt از پریسما تبدیلش کنه به sqlalchemy. این وسط chatgpt برای یکی از مدل ها برای id مدل، به جای اینکه از دیفالت فکتوری استفاده کنه، از دیفالت استفاده میکرد. و اینطوری بود که اون مدل هروقت instance ای ازش ساخته میشد آیدی تکراری میشد. و دیتابیس ارور میداد. و این باگ باعث ضرر ۱۰ هزار دلاری به این شرکت شد. صرفا برای اینکه یکینمیدونست دیتاکلس توپایتون چطور کار میکنه و به جای خوندن داک از chatgpt پرسید 🙂
@PyBackendHub
archive.ph
How a single ChatGPT mistake cost us $10,000+ | Asim Shrestha
archived 9 Jun 2024 22:00:26 UTC
👍15👎3🤣3
Python BackendHub
یک باگ خیلی عجیب فهمیدین چیه؟ @PyBackendHub
کدو اول توضیح میدم چون خیلیا درک نکردن, این کد درواقع داره اینکارو میکنه
SELECT 1
شما وقتی تو sqlalchemy چیزی رو سلکت میکنی خودکار تبدیل به تاپلی از اون چیز میشه. مثلا من اگه 1 رو سلکت کنم میشه Select[Tuple[int]]
پس درواقع تایپ چیزی که دو تا فانکشن دارن ریترن میکنن تاپلی هست که فقط یک int هست.
ولی تو من signature فانکشن گفتم تاپلی از string عه. که خب تایپ اشتباهه.
حالا برگردیم به باگ:
تو فانکشن اول که correct هست تایپ چکر داره این موضوعو به من نشون میده. چون من گفتم q = ... و بعد q رو ریترن کردم.
ولی وقتی خوده فانکشن رو ریترن میکنم مستقیما تایپ چکر تشخیص نمیده. که خیلیی باگ عجیبیه 😂
@PyBackendHub
SELECT 1
شما وقتی تو sqlalchemy چیزی رو سلکت میکنی خودکار تبدیل به تاپلی از اون چیز میشه. مثلا من اگه 1 رو سلکت کنم میشه Select[Tuple[int]]
پس درواقع تایپ چیزی که دو تا فانکشن دارن ریترن میکنن تاپلی هست که فقط یک int هست.
ولی تو من signature فانکشن گفتم تاپلی از string عه. که خب تایپ اشتباهه.
حالا برگردیم به باگ:
تو فانکشن اول که correct هست تایپ چکر داره این موضوعو به من نشون میده. چون من گفتم q = ... و بعد q رو ریترن کردم.
ولی وقتی خوده فانکشن رو ریترن میکنم مستقیما تایپ چکر تشخیص نمیده. که خیلیی باگ عجیبیه 😂
@PyBackendHub
👾6👍4🥴1🦄1
Python BackendHub
کدو اول توضیح میدم چون خیلیا درک نکردن, این کد درواقع داره اینکارو میکنه SELECT 1 شما وقتی تو sqlalchemy چیزی رو سلکت میکنی خودکار تبدیل به تاپلی از اون چیز میشه. مثلا من اگه 1 رو سلکت کنم میشه Select[Tuple[int]] پس درواقع تایپ چیزی که دو تا فانکشن دارن ریترن…
ایشو زده بودم تو pyright درواقع فهمیدم که باگ نیست. درواقع دیزاین اینطوریه.
ما روش های مختلفی برای resolve کردن تایپینگ داریم. طوری که pyright کار میکنه bidirectional type inference هست. یعنی چی؟
Constructors are typed by inheritance, and so the name is available when resolving the constructor, whereas variables are typed by synthesis, and so each variable must have a unique type.
دقیقا اتفاقی که تو select افتاده . تو sqlalchemy سلکت ۹ تا اورلود داره. یعنی برای ۹ اینپوت مختلف, تایپینگ مختلف داره.
یکی از این overload ها درواقع داره تایپینگ رو satisfy میکنه. یعنی این مسیر رو برعکس میره. درواقع داره چک میکنه که آیا Select[tuple[str]] با تایپ ریترن شده از اون فانکشن satisfy میشه یا نه. و چون یکی از این اورلود ها این satisfy میکنه بنابراین تایپ چکر ارور نمیده.
ولی وقتی assign اش میکنی به یک مقدار و بعد اون مقدار رو ریترن میکنی دیگه نمیره با همه constructor ها (که میشن همون overload ها) چک کنه تایپ satisfy میشه یا نه. داره دو تا تایپ رو باهم مقایسه میکنه.
پس هر موقع شما یک constructor داشتین که بر اساس ورودی ممکن بود تایپ های مختلف بده, باید حواستون باشه که حتما assign اش کنید به یک مقدار تا bidirectional نشه.
@PyBackendHub
ما روش های مختلفی برای resolve کردن تایپینگ داریم. طوری که pyright کار میکنه bidirectional type inference هست. یعنی چی؟
Constructors are typed by inheritance, and so the name is available when resolving the constructor, whereas variables are typed by synthesis, and so each variable must have a unique type.
دقیقا اتفاقی که تو select افتاده . تو sqlalchemy سلکت ۹ تا اورلود داره. یعنی برای ۹ اینپوت مختلف, تایپینگ مختلف داره.
یکی از این overload ها درواقع داره تایپینگ رو satisfy میکنه. یعنی این مسیر رو برعکس میره. درواقع داره چک میکنه که آیا Select[tuple[str]] با تایپ ریترن شده از اون فانکشن satisfy میشه یا نه. و چون یکی از این اورلود ها این satisfy میکنه بنابراین تایپ چکر ارور نمیده.
ولی وقتی assign اش میکنی به یک مقدار و بعد اون مقدار رو ریترن میکنی دیگه نمیره با همه constructor ها (که میشن همون overload ها) چک کنه تایپ satisfy میشه یا نه. داره دو تا تایپ رو باهم مقایسه میکنه.
پس هر موقع شما یک constructor داشتین که بر اساس ورودی ممکن بود تایپ های مختلف بده, باید حواستون باشه که حتما assign اش کنید به یک مقدار تا bidirectional نشه.
@PyBackendHub
👍11❤2😱1
Forwarded from BenDev
YouTube
مصاحبه فنی سنیور با مانی
مصاحبه فنی سنیور با مانی
Mock interview Senior
+ تحلیل و بررسی
▬ محتوای ویدیو ▬▬▬▬▬▬▬▬▬▬
ما تو این ویدیو قصد داریم که با دوست عزیزمون مانی مصاحبه کنیم
و با هم نکات مهم رو دربیاریم و ازش درس بگیریم
▬ بخش های ویدیو ▬▬▬▬▬▬▬▬▬▬
0:00 مقدمه
0:50 ساختار…
Mock interview Senior
+ تحلیل و بررسی
▬ محتوای ویدیو ▬▬▬▬▬▬▬▬▬▬
ما تو این ویدیو قصد داریم که با دوست عزیزمون مانی مصاحبه کنیم
و با هم نکات مهم رو دربیاریم و ازش درس بگیریم
▬ بخش های ویدیو ▬▬▬▬▬▬▬▬▬▬
0:00 مقدمه
0:50 ساختار…
❤11🔥4
بنظره من دونستن type interface خیلی به دانش شما کمک میکنه و تو نحوه کد زدتون تاثیر میذاره وقتی شروع میکنید بهش فکر میکنید.
حالا quiz امروز: این جفت variable ها درواقع تایپ annotation اشون یکیه. جفتشون Mapping[str,str] هستن. بنظرتون pylance (یا pyright که میشه تایپ چکر vscode من) چطور تشخیص میده که بالایی mutable هست ولی پایینی mutable نیست؟
هینت:این سوال لزوما مربوط به پایتون نمیشه. یک قاعده کلی تو کامپیوتر ساینس هست.
@PyBackendHub
حالا quiz امروز: این جفت variable ها درواقع تایپ annotation اشون یکیه. جفتشون Mapping[str,str] هستن. بنظرتون pylance (یا pyright که میشه تایپ چکر vscode من) چطور تشخیص میده که بالایی mutable هست ولی پایینی mutable نیست؟
هینت:این سوال لزوما مربوط به پایتون نمیشه. یک قاعده کلی تو کامپیوتر ساینس هست.
@PyBackendHub
👍5
اما جوابش:
بحث ساب تایپ تو پایتونه (چه تو mypy چه تو pyright). که دو روش وجود داره
nominal typing
و
structural typing
وقتی من تو پایتون مینویسم
var = 2
طبق nominal typing خود تایپ چکر میفهمه تایپ var درواقع int هست. (یا حتی دقیقتر Literal 2)
و همیشه nominal به صورت strict بر پایه class hierarchy هست. و غلبه میکنه به structural type به شرطی که تو hierarchy tree اش اون تایپ رو داشته باشه. اگه نداشته باشه ارور میده (تو عکس ببین bar دقیقا همین کیسه)
برای همین شما بنویسی:
foo: int = 2
درواقع تایپ چکر به شما میگه تایپ foo اینت نیست. بلکه Literal 2 هست. تایپ چکر هم ایرادی به شما نمیگیره چون میگه int درواقع Literal 2 رو satisfy میکنه. ولی برعکسش درست نیست. یعنی ساده تر بگم literal 2 همیشه int هست. ولی int همیشه literal 2 نیست.
این موضوع رو تو عکس واضح تر نشون دادم با ۲ تایپی که خودم ساختم.
این رفتار که ایا این دو تایپینگ باید باشن یا فقط یکیش باشه یا چطوری هم دیگه رو satisfy میکنن ممکنه تو زبونا ممکنه فرق کنه ولی کانسپت language design هست.
@PyBackendHub
بحث ساب تایپ تو پایتونه (چه تو mypy چه تو pyright). که دو روش وجود داره
nominal typing
و
structural typing
وقتی من تو پایتون مینویسم
var = 2
طبق nominal typing خود تایپ چکر میفهمه تایپ var درواقع int هست. (یا حتی دقیقتر Literal 2)
و همیشه nominal به صورت strict بر پایه class hierarchy هست. و غلبه میکنه به structural type به شرطی که تو hierarchy tree اش اون تایپ رو داشته باشه. اگه نداشته باشه ارور میده (تو عکس ببین bar دقیقا همین کیسه)
برای همین شما بنویسی:
foo: int = 2
درواقع تایپ چکر به شما میگه تایپ foo اینت نیست. بلکه Literal 2 هست. تایپ چکر هم ایرادی به شما نمیگیره چون میگه int درواقع Literal 2 رو satisfy میکنه. ولی برعکسش درست نیست. یعنی ساده تر بگم literal 2 همیشه int هست. ولی int همیشه literal 2 نیست.
این موضوع رو تو عکس واضح تر نشون دادم با ۲ تایپی که خودم ساختم.
این رفتار که ایا این دو تایپینگ باید باشن یا فقط یکیش باشه یا چطوری هم دیگه رو satisfy میکنن ممکنه تو زبونا ممکنه فرق کنه ولی کانسپت language design هست.
@PyBackendHub
👍5😭2
This media is not supported in your browser
VIEW IN TELEGRAM
Same question, different places 😂
@PyBackendHub
@PyBackendHub
🤣25😁1
Correlation is not causation
اشتباهی که به عنوان انسان و برنامه نویس زیاد انجام میدیم
تو این سایت همش رو نوشته. تازه نکته جالب اینجاست که خیلیاش ریسرچ و پیپیره.
https://www.tylervigen.com/spurious-correlations
@PyBackendHub
اشتباهی که به عنوان انسان و برنامه نویس زیاد انجام میدیم
تو این سایت همش رو نوشته. تازه نکته جالب اینجاست که خیلیاش ریسرچ و پیپیره.
https://www.tylervigen.com/spurious-correlations
@PyBackendHub
👍10
#توصیه
وقتی دارین از SQLAlchemy استفاده میکنید و دارین یک چیزی سلکت میکنید
بهتره select from رو بنویسید
چون امروز یک ساعت درگیر یک باگیبودم، که یک آبجکت cte نسبتا پیچیده چند بار استفاده شده بود، و تو یکی از این دفعات sqlalchemy نمیتونست به درستی متوجه شه رو کدوم مدل باید سلکت from کنه (مدل اشتباهی رو داشت سلکت میکرد) با وجود اینکه فقط یک چیزو داشتم سلکت میکردم.
یعنی به جای
sa.select(Model)
بنویسید
sa.select(Model).select_from(Model)
کلا هرچی لاجیک compile کوئری رو بیرون تر بکشید و explicit تر باشه و به خوده SQL نزدیک تر باشه، بهتره، خیلی edge case وجود داره همیشه.
@PyBackendHub
وقتی دارین از SQLAlchemy استفاده میکنید و دارین یک چیزی سلکت میکنید
بهتره select from رو بنویسید
چون امروز یک ساعت درگیر یک باگیبودم، که یک آبجکت cte نسبتا پیچیده چند بار استفاده شده بود، و تو یکی از این دفعات sqlalchemy نمیتونست به درستی متوجه شه رو کدوم مدل باید سلکت from کنه (مدل اشتباهی رو داشت سلکت میکرد) با وجود اینکه فقط یک چیزو داشتم سلکت میکردم.
یعنی به جای
sa.select(Model)
بنویسید
sa.select(Model).select_from(Model)
کلا هرچی لاجیک compile کوئری رو بیرون تر بکشید و explicit تر باشه و به خوده SQL نزدیک تر باشه، بهتره، خیلی edge case وجود داره همیشه.
@PyBackendHub
👍19👌3