اجرای دستورات خام Sql در SQLAlchemy

در پست قبلی درباره کتابخونه فوق العاده SQLAlchemy نوشتم و مثال هایی از نحوه استفاده از اون به صورت ORM، ولی موقعیت هایی پیش میاد که یا پروژه مورد ساده ایه یا میخواید بدون اینکه وقت بزارید و یک کوئری رو به معادلش در SQLAlchemy تبدیل کنید سریع اون رو اجرا کنید

برای اینکار باز هم SQLAlchemy کمکتون میکنه

نکته ۱: وقتی تابع execute رو اجرا می‌کنید خود کوئری اجرا نمیشه بلکه زمانی اجرا میشه که یکی از توایع fetchone, fetchall یا first رو اجرا کنید و یا متغیر result رو تو حلقه قرار بدید

نکته ۲ : اگه تو کوئری از prepared statement استفاده میکنید باید کوئری رو تو تابع text قرار بدید.

 

و توضیح این توابع

fetchone: اولین رکورد نتایح رو برمیگردونه و در فراخوانی بعدی رکورد بعدی

fetchall: تمام نتایج رو یکجا برمیگردونه

first: اولین نتیجه رو بر میگردونه و حافظه ای که نتایج تو اون بوده رو ازاد میکنه و دیگه نمیتونید نتایج رو ببینید

fetchmany: نتایج رو به صورت قسمت، قسمت میگیره. در مثال زیر میتونید ببینید

کلا بهتر هست که از parameter binding برای ارسال مقادیر استفاده کنید اما مواقعی هست که نمیشه مثلا اگه بخواید insert…select کنید اونموقع باید query رو به روش زیر بسازید

نکته: باز هم میگم که این روش خطر حمله SQL Injection رو داره و بهتر هست استفاده نکنید.

نکته: قبلش باید با پیپ pymysql رو نصب کنید  

نکته: تبدیل ‘:’ به ‘:\’ در واقع برای اسکیپ کردن ‘:’ هست چون SQLAlchemy وقتی این کاراکتر رو میبینه انتظار داره که یک مقدار متناظر در پارامتر دوم execute داشته باشه اما با این کار میگیم اینطوری نیستش و مثل یک کاراکتر عادی باهاش برخورد کنه.

چندین راه برای اجرای دستورات خام هست من این راه رو همیشه استفاده میکنم یعنی از Session استفاده میکنم و تمام دستورات رو کاملن مستقل اجرا میکنم بدون اینکه هیچ کلاسی تعریف کنم

یه نکته مهم اینکه تو حذف کردن یا ایجاد رکورد ممکن هست که warning بده

در تمام دستورات بالا با استفاده از sessionmaker یک session ایجاد کردیم اگه میخواید از session استفاد نکنید میتونید از متد connect استفاده کنید. مثال

برای مثالهای بیشتر هم اینجا و اینجا رو ببینید

جستجو در کل مطالب سایت

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *