آموزش رابطه شی (1. x API)

ساخت وبلاگ

این آموزش شامل API شناخته شده Sqlalchemy ORM است که سالها در حال استفاده است. از Sqlalchemy 1. 4 ، دو سبک مجزا از ORM استفاده شده به سبک 1. x و سبک 2. 0 وجود دارد که دومی آن طیف گسترده ای از تغییرات برجسته را در مورد نحوه ساخت و اجرای نمایش داده های ORM ایجاد می کند.

برنامه این است که در Sqlalchemy 2. 0 ، سبک 1. x استفاده از ORM میراث در نظر گرفته می شود و دیگر در مستندات نمایش داده نمی شود و بسیاری از جنبه های آن حذف می شود. با این حال ، اصلی ترین عنصر استفاده از ORM سبک 1. x ، شیء پرس و جو ، همچنان برای موارد استفاده طولانی مدت میراث در دسترس خواهد بود.

این آموزش برای کاربرانی که می خواهند یاد بگیرند که چگونه از Sqlalchemy برای سالها استفاده می شود ، به ویژه کاربرانی که با برنامه های موجود یا مطالب یادگیری مرتبط که به سبک 1. x کار می کنند ، کاربرد دارد.

برای مقدمه ای از Sqlalchemy از دیدگاه جدید 1. 4 / 2. 0 ، به آموزش Sqlalchemy 1. 4 / 2. 0 مراجعه کنید.

SQLALCHEMY Object Relational Mapper روشی را برای ارتباط کلاسهای پایتون تعریف شده توسط کاربر با جداول پایگاه داده و مواردی از آن کلاس ها (اشیاء) با ردیف در جداول مربوطه ارائه می دهد. این سیستم شامل سیستمی است که به طور شفاف همه تغییرات حالت بین اشیاء و ردیف های مرتبط با آنها ، به نام یک واحد کار و همچنین سیستمی را برای بیان نمایش داده های پایگاه داده از نظر کلاس های تعریف شده کاربر و روابط تعریف شده آنها بین یکدیگر همزمان می کند.

ORM برخلاف زبان بیان Sqlalchemy است که بر روی آن ORM ساخته شده است. در حالی که زبان بیان SQL ، معرفی شده در آموزش زبان بیان SQL (1. x API) ، سیستمی را برای نشان دادن سازه های بدوی بانک اطلاعاتی رابطه ای مستقیماً بدون عقیده ارائه می دهد ، ORM یک الگوی سطح بالا و انتزاعی از استفاده را ارائه می دهد ، که خود نیز هستنمونه ای از استفاده کاربردی از زبان بیان.

در حالی که در بین الگوهای استفاده از ORM و زبان بیان همپوشانی وجود دارد ، شباهت ها از آنچه در ابتدا ممکن است ظاهر شود ، سطحی تر است. یکی از ساختار و محتوای داده ها از منظر یک مدل دامنه تعریف شده توسط کاربر که به طور شفاف ادامه دارد و از مدل ذخیره سازی اساسی آن تازه می شود ، نزدیک می شود. دیگر آن را از منظر طرحواره تحت اللفظی و بازنمایی بیان SQL که صریحاً در پیام های مصرف شده به صورت جداگانه توسط پایگاه داده تشکیل شده است ، نزدیک می شود.

یک برنامه موفق ممکن است با استفاده از نقشه برداری رابطه شیء به طور انحصاری ساخته شود. در موقعیت های پیشرفته ، برنامه ای که با ORM ساخته شده است ممکن است به طور گاه به گاه از زبان بیان مستقیماً در مناطق خاصی استفاده کند که تعامل پایگاه داده خاص مورد نیاز باشد.

The following tutorial is in doctest format, meaning each>>>خط چیزی را نشان می دهد که می توانید در یک دستور فرمان پایتون تایپ کنید ، و متن زیر مقدار بازگشت مورد انتظار را نشان می دهد.

بررسی نسخه

یک بررسی سریع برای تأیید اینکه حداقل در نسخه 1. 4 از Sqlalchemy قرار داریم:

برقراری ارتباط¶

برای این آموزش از یک پایگاه داده SQLite فقط در حافظه استفاده خواهیم کرد. برای اتصال ما از Create_Engine () استفاده می کنیم:

پرچم Echo یک میانبر برای تنظیم ورود به سیستم Sqlalchemy است که از طریق ماژول استاندارد ورود به سیستم پایتون انجام می شود. با فعال کردن آن ، همه SQL تولید شده تولید شده را خواهیم دید. اگر از طریق این آموزش کار می کنید و می خواهید تولید کمتری تولید کنید ، آن را به False تنظیم کنید. این آموزش SQL را در پشت یک پنجره بازشو قالب بندی می کند تا در راه ما نباشد. فقط روی پیوندهای "SQL" کلیک کنید تا ببینید چه چیزی تولید می شود.

مقدار بازگشت Create_engine () نمونه ای از موتور است و رابط اصلی پایگاه داده را نشان می دهد ، که از طریق گویش اقتباس شده است که جزئیات پایگاه داده و DBAPI را در دست دارد. در این حالت ، گویش SQLite دستورالعمل هایی را به ماژول SQLite3 داخلی پایتون تفسیر می کند.

موتور ، هنگامی که برای اولین بار توسط Create_Engine () برگردانده شده است ، در واقع سعی نکرده است به پایگاه داده متصل شود. این اتفاق فقط اولین بار است که از آن خواسته می شود یک کار را در برابر پایگاه داده انجام دهد.

اولین باری که روشی مانند Engine. execute () یا Engine. Connect () خوانده می شود ، موتور یک اتصال DBAPI واقعی به پایگاه داده ایجاد می کند ، که سپس برای انتشار SQL استفاده می شود. هنگام استفاده از ORM ، ما معمولاً از موتور مستقیماً یک بار ایجاد نمی کنیم. در عوض ، در پشت صحنه توسط ORM استفاده می شود ، همانطور که به زودی خواهیم دید.

URL های بانک اطلاعاتی - شامل نمونه هایی از Create_engine () اتصال به چندین نوع بانک اطلاعاتی با پیوندها به اطلاعات بیشتر است.

نقشه برداری را اعلام کنید

هنگام استفاده از ORM ، فرآیند پیکربندی با توصیف جداول پایگاه داده ای که با آنها سر و کار خواهیم داشت ، شروع می شود و سپس با تعریف کلاس های خودمان که در آن جداول نقشه برداری می شوند. در SQLalchemy مدرن ، این دو کار معمولاً با استفاده از سیستمی به عنوان پسوندهای اعلانی انجام می شود که به ما امکان می دهد کلاس هایی را ایجاد کنیم که شامل دستورالعمل هایی برای توصیف جدول پایگاه داده واقعی آنها باشد.

کلاسهای نقشه برداری شده با استفاده از سیستم اعلامی از نظر یک کلاس پایه تعریف می شوند که یک کاتالوگ کلاس ها و جداول را نسبت به آن پایه حفظ می کند - این به عنوان کلاس پایه اعلامی شناخته می شود. برنامه ما معمولاً فقط یک نمونه از این پایگاه در یک ماژول متداول خواهد داشت. ما کلاس پایه را با استفاده از تابع declarative_base () ایجاد می کنیم ، به شرح زیر:

اکنون که "پایه" داریم ، می توانیم هر تعداد کلاس نقشه برداری را از نظر آن تعریف کنیم. ما فقط با یک جدول واحد به نام کاربران شروع خواهیم کرد که با استفاده از برنامه ما ، سوابق کاربران نهایی را ذخیره می کند. یک کلاس جدید به نام کاربر کلاس است که ما این جدول را نقشه می کنیم. در داخل کلاس ، ما جزئیات مربوط به جدول را که در آن نقشه برداری خواهیم کرد ، در درجه اول نام جدول ، و نام ها و داده های ستون ها تعریف می کنیم:

کلاس کاربر یک روش __repr __ () را تعریف می کند ، اما توجه داشته باشید که اختیاری است. ما فقط آن را در این آموزش پیاده سازی می کنیم تا مثالهای ما اشیاء کاربر با فرمت به زیبایی را نشان دهند.

یک کلاس با استفاده از اعلامیه حداقل به یک ویژگی __tablename__ نیاز دارد و حداقل یک ستون که بخشی از یک کلید اصلی است [1]. Sqlalchemy هرگز به خودی خود فرضیه هایی را در مورد جدول که یک کلاس به آن اشاره می کند ، نمی کند ، از جمله اینکه هیچ کنوانسیون داخلی برای نام ها ، داده ها یا محدودیت ها ندارد. اما این بدان معنی نیست که دیگ بخار لازم است. درعوض ، شما تشویق می شوید که با استفاده از توابع یاور و کلاسهای میکسین ، کنوانسیون های خودکار خود را ایجاد کنید ، که در کلاس های Mixin و Custom Custom به تفصیل شرح داده شده است.

هنگامی که کلاس ما ساخته می شود ، اعلانی جایگزین تمام اشیاء ستون با دسترسی های ویژه پایتون معروف به توصیف کننده ها می شود. این فرایندی است که به عنوان ابزار دقیق شناخته می شود. کلاس نقشه برداری شده "ابزار شده" وسیله ای را برای ما فراهم می کند تا به جدول ما در یک زمینه SQL و همچنین ادامه و بارگذاری مقادیر ستون ها از پایگاه داده مراجعه کنیم.

خارج از آنچه که فرایند نقشه برداری به کلاس ما انجام می دهد ، کلاس در غیر این صورت بیشتر یک کلاس معمولی پایتون باقی مانده است ، که می توانیم هر تعداد از ویژگی ها و روش های معمولی مورد نیاز برنامه خود را تعریف کنیم.

برای کسب اطلاعات در مورد اینکه چرا یک کلید اصلی مورد نیاز است ، ببینید چگونه می توانم یک جدول را که کلید اصلی ندارد ، نقشه برداری کنم؟واد

یک طرح ایجاد کنید

با ساخت کلاس کاربری ما از طریق سیستم اعلامی ، ما اطلاعات مربوط به جدول خود را که به عنوان ابرداده جدول معروف است ، تعریف کرده ایم. شیء مورد استفاده Sqlalchemy برای نشان دادن این اطلاعات برای یک جدول خاص ، شیء جدول نامیده می شود و در اینجا اعلامی یکی را برای ما ساخته است. ما می توانیم این شی را با بازرسی از ویژگی __table__ مشاهده کنیم:

سیستم اعلامی ، اگرچه بسیار توصیه می شود ، برای استفاده از ORM Sqlalchemy لازم نیست. در خارج از اعلامیه ، هر کلاس ساده پایتون را می توان با استفاده از عملکرد Mapper () به طور مستقیم در هر جدول نقشه برداری کرد. این استفاده کمتر متداول در نقشه برداری ضروری توصیف شده است.

هنگامی که ما کلاس خود را اعلام کردیم ، اعلامیه از یک متاکلاس پایتون برای انجام فعالیت های اضافی پس از اتمام اعلامیه کلاس استفاده کرد. در این مرحله ، سپس یک شیء جدول را مطابق با مشخصات ما ایجاد کرده و با ساخت یک شیء نقشه برداری ، آن را با کلاس مرتبط می کند. این شیء یک شیء پشت صحنه است که ما معمولاً نیازی به برخورد مستقیم با آنها نداریم (اگرچه می تواند اطلاعات زیادی در مورد نقشه برداری ما در صورت نیاز به ما ارائه دهد).

جدول جدول عضو مجموعه ای بزرگتر است که به عنوان ابرداده شناخته می شود. هنگام استفاده از اعلامیه ، این شی با استفاده از ویژگی . metadata از کلاس پایه اعلامی ما در دسترس است.

ابرداده رجیستری است که شامل توانایی انتشار مجموعه محدودی از دستورات تولید طرحواره به پایگاه داده است. از آنجا که پایگاه داده SQLite ما در واقع جدول کاربران را در اختیار ندارد ، می توانیم از ابرداده برای انتشار بیانیه های جدول به پایگاه داده برای همه جداول که هنوز وجود ندارند ، استفاده کنیم. در زیر ، ما به روش metadata. create_all () می نامیم و در موتور ما به عنوان منبع اتصال پایگاه داده می گذرد. ما خواهیم دید که دستورات ویژه برای اولین بار برای بررسی حضور جدول کاربران منتشر می شوند ، و به دنبال آن بیانیه جدول ایجاد واقعی:

حداقل توضیحات جدول در مقابل توضیحات کامل

کاربران آشنا با نحو جدول Create ممکن است متوجه شوند که ستون های Varchar بدون طول تولید شده اند. در SQLite و PostgreSQL ، این یک داده معتبر است ، اما در مورد دیگر ، مجاز نیست. بنابراین اگر این آموزش را در یکی از آن پایگاه داده ها اجرا کنید ، و می خواهید از Sqlalchemy برای انتشار جدول استفاده کنید ، ممکن است "طول" به نوع رشته ارائه شود:

قسمت طول در رشته ، و همچنین زمینه های دقیق/مقیاس مشابه موجود در عدد صحیح ، عددی و غیره توسط Sqlalchemy به غیر از ایجاد جداول ارجاع نمی شود.

علاوه بر این، Firebird و Oracle به دنباله هایی برای تولید شناسه های کلید اولیه جدید نیاز دارند، و SQLAlchemy این شناسه ها را بدون دستور تولید یا فرض نمی کند. برای آن، از ساختار Sequence استفاده می کنید:

یک جدول کامل و بدون خطا که از طریق نگاشت اعلانی ما ایجاد شده است، به این صورت است:

ما این تعریف جدول مفصل تر را به طور جداگانه اضافه می کنیم تا تفاوت بین ساختار حداقلی که عمدتاً فقط برای استفاده در پایتون طراحی شده است، در مقابل چیزی که برای انتشار عبارات CREATE TABLE در مجموعه خاصی از backendها با الزامات دقیق تر استفاده می شود، برجسته شود.

یک نمونه از کلاس Mapped¶ ایجاد کنید

با تکمیل نقشه برداری، بیایید اکنون یک شی User ایجاد و بررسی کنیم:

متد __init__().

کلاس User ما، همانطور که با استفاده از سیستم Declarative تعریف شده است، با یک سازنده (مثلاً روش __init__()) ارائه شده است که به طور خودکار نام کلمات کلیدی را می پذیرد که با ستون هایی که ما ترسیم کرده ایم مطابقت داشته باشد. ما آزاد هستیم که هر متد صریح __init__() را که در کلاس خود ترجیح می دهیم تعریف کنیم، که متد پیش فرض ارائه شده توسط Declarative را لغو می کند.

حتی اگر ما آن را در سازنده مشخص نکرده ایم، ویژگی id همچنان هنگام دسترسی به آن مقدار None را تولید می کند (برخلاف رفتار معمول پایتون برای افزایش AttributeError برای یک ویژگی تعریف نشده). ابزار دقیق SQLAlchemy معمولاً این مقدار پیش فرض را برای ویژگی های نگاشت ستونی هنگام اولین دسترسی تولید می کند. برای آن دسته از ویژگی هایی که ما در واقع مقداری را به آنها اختصاص داده ایم، سیستم ابزار دقیق آن تخصیص ها را برای استفاده در یک دستور INSERT نهایی که به پایگاه داده ارسال می شود، ردیابی می کند.

ایجاد یک جلسه

ما اکنون آماده هستیم تا با پایگاه داده صحبت کنیم."دسته" ORM برای پایگاه داده Session است. هنگامی که ما برای اولین بار برنامه را راه اندازی می کنیم، در همان سطح با دستور ()create_engine خود، یک کلاس Session تعریف می کنیم که به عنوان یک کارخانه برای اشیاء Session جدید عمل می کند:

در مواردی که برنامه شما هنوز موتور ندارد وقتی که اشیاء سطح ماژول خود را تعریف می کنید، فقط آن را به این صورت تنظیم کنید:

بعداً، وقتی موتور خود را با ()create_engine ایجاد کردید، آن را با استفاده از sessionmaker. configure() به Session متصل کنید:

الگوهای چرخه زندگی جلسه

این سؤال که چه موقع جلسه را انجام می دهیم بستگی به این دارد که چه نوع کاربردی ساخته شده است. به خاطر داشته باشید ، جلسه فقط یک فضای کاری برای اشیاء شما است ، محلی به یک پایگاه داده خاص - اگر به عنوان یک برنامه کاربردی به عنوان مهمان در یک مهمانی شام فکر می کنید ، جلسه بشقاب مهمان است و اشیاء آن را در اختیار دارند غذا هستند(و بانک اطلاعاتی ... آشپزخانه؟)! اطلاعات بیشتر در مورد این موضوع موجود در چه زمانی جلسه ای را می سازم ، چه زمانی آن را مرتکب می شوم و چه زمانی آن را می بندم؟واد

این کلاس جلسه سفارشی اشیاء جلسه جدیدی را ایجاد می کند که به پایگاه داده ما محدود می شوند. سایر خصوصیات تراکنش ممکن است هنگام فراخوانی SessionMaker نیز تعریف شود. اینها در فصل بعدی شرح داده شده است. سپس ، هر زمان که نیاز به مکالمه با پایگاه داده داشته باشید ، یک جلسه را فوری می کنید:

جلسه فوق با موتور فعال SQLite ما همراه است ، اما هنوز هیچ اتصالی باز نکرده است. هنگامی که برای اولین بار مورد استفاده قرار می گیرد ، اتصال را از یک استخر اتصالات نگهداری شده توسط موتور بازیابی می کند و تا زمانی که همه تغییرات را انجام دهیم و یا شیء جلسه را ببندیم ، روی آن نگه می دارد.

اضافه کردن و به روزرسانی اشیاء

برای ادامه شیء کاربر ، ما Session. add () آن را به جلسه خود:

در این مرحله ، ما می گوییم که نمونه در انتظار است. هنوز هیچ SQL صادر نشده است و هنوز شیء توسط یک ردیف در پایگاه داده نشان داده نشده است. در این جلسه SQL صادر می شود تا در اسرع وقت ، اد جونز را ادامه دهد و با استفاده از فرایندی که به عنوان گرگرفتگی شناخته می شود. اگر از پایگاه داده برای اد جونز پرس و جو کنیم ، همه اطلاعات در حال تعلیق ابتدا شستشو می یابد و پرس و جو بلافاصله پس از آن صادر می شود.

به عنوان مثال ، در زیر ما یک شی پرس و جو جدید ایجاد می کنیم که نمونه های کاربر را بارگیری می کند. ما ویژگی نام ED را "فیلتر" می کنیم و نشان می دهیم که ما فقط در لیست کامل ردیف ها فقط اولین نتیجه را می خواهیم. یک نمونه کاربر بازگردانده می شود که معادل آن است که ما اضافه کرده ایم:

در حقیقت ، جلسه مشخص کرده است که ردیف برگشتی همان ردیفی است که قبلاً در نقشه داخلی اشیاء خود نشان داده شده است ، بنابراین ما در واقع نمونه یکسان را به عنوان آنچه که فقط اضافه کردیم برگردانیم:

مفهوم ORM در کار در اینجا به عنوان نقشه هویت شناخته می شود و تضمین می کند که تمام عملیات در یک ردیف خاص در یک جلسه بر اساس همان مجموعه داده ها عمل می کنند. هنگامی که یک شی با یک کلید اصلی خاص در جلسه وجود داشته باشد ، تمام نمایش داده های SQL در آن جلسه همیشه همان شیء پایتون را برای آن کلید اصلی خاص برمی گردانند. همچنین در صورت تلاش برای قرار دادن یک شیء دوم و از قبل با همان کلید اصلی در جلسه ، خطایی ایجاد می کند.

ما می توانیم با استفاده از add_all () اشیاء کاربر بیشتری را اضافه کنیم:

همچنین ، ما تصمیم گرفتیم که نام مستعار ED چندان عالی نیست ، بنابراین اجازه می دهیم آن را تغییر دهیم:

جلسه توجه می کند. به عنوان مثال می داند که اد جونز اصلاح شده است:

و این سه شیء کاربر جدید در انتظار هستند:

ما به جلسه می گوییم که می خواهیم همه تغییرات باقی مانده در پایگاه داده را صادر کنیم و معامله را انجام دهیم که در کل در حال انجام است. ما این کار را از طریق Session.commit () انجام می دهیم. جلسه بیانیه به روزرسانی را برای تغییر نام مستعار در "ED" منتشر می کند ، و همچنین بیانیه هایی را برای سه شیء کاربر جدید که اضافه کرده ایم وارد کنید:

Session.commit () تغییرات باقی مانده را در پایگاه داده می کند و معامله را انجام می دهد. منابع اتصال ارجاع شده توسط جلسه اکنون به استخر اتصال بازگردانده شده است. عملیات بعدی با این جلسه در یک معامله جدید اتفاق می افتد که در صورت نیاز مجدداً منابع اتصال را دوباره به دست می آورد.

اگر به ویژگی Ed's ID نگاه کنیم ، که قبلاً هیچ کدام نبود ، اکنون یک ارزش دارد:

بعد از اینکه جلسه ردیف های جدید را در پایگاه داده وارد می کند ، تمام شناسه های تازه تولید شده و پیش فرض های تولید شده توسط پایگاه داده به عنوان مثال ، بلافاصله یا از طریق بارگذاری بار در ابتدا در دسترس قرار می گیرند. در این حالت ، کل ردیف دوباره در دسترس قرار گرفت زیرا معامله جدیدی پس از صدور جلسه Commit () آغاز شد. Sqlalchemy به طور پیش فرض داده ها را از معامله قبلی اولین باری که در یک معامله جدید به آن دسترسی پیدا می کند ، تازه می کند ، به طوری که جدیدترین حالت در دسترس است. سطح بارگیری مجدد همانطور که در استفاده از جلسه شرح داده شده است قابل تنظیم است.

جلسه جلسه بیان می کند

از آنجا که شیء کاربر ما از خارج از جلسه ، به داخل جلسه و بدون کلید اصلی حرکت می کند ، تا در واقع درج شود ، بین سه از پنج حالت "شیء" موجود - گذرا ، در انتظار و مداوم حرکت کرد. آگاهی از این حالتها و منظور آنها همیشه ایده خوبی است - حتماً برای یک مرور سریع ، مقدماتی سریع را به حالت های شیء بخوانید.

چرخش به عقب ¶

از آنجا که جلسه در یک معامله کار می کند ، ما می توانیم تغییراتی را که انجام شده نیز انجام دهیم. بیایید دو تغییر ایجاد کنیم که برگردیم. نام کاربری ed_user روی ادواردو تنظیم می شود:

و ما یک کاربر اشتباه دیگر ، Fake_user را اضافه خواهیم کرد:

پرس و جو در جلسه ، می توانیم ببینیم که آنها در معامله فعلی قرار گرفته اند:

با بازگشت به عقب ، می توانیم ببینیم که نام ed_user به ED برگشته است ، و Fake_user از جلسه خارج شده است:

صدور انتخاب ، تغییرات ایجاد شده در پایگاه داده را نشان می دهد:

پرس و جو

یک شی پرس و جو با استفاده از روش پرس و جو () در جلسه ایجاد می شود. این تابع تعداد متغیر آرگومان ها را می گیرد ، که می تواند ترکیبی از کلاس ها و توصیف کننده های کلاس درج باشد. در زیر ، ما یک پرس و جو را نشان می دهیم که نمونه های کاربر را بارگیری می کند. هنگامی که در یک زمینه تکراری ارزیابی می شود ، لیست اشیاء کاربر موجود بازگردانده می شود:

این پرس و جو همچنین توصیف کننده های ORM-tumented را به عنوان استدلال می پذیرد. هر زمان که اشخاص چند کلاس یا نهادهای مبتنی بر ستون به عنوان آرگومان برای عملکرد پرس و جو () بیان شوند ، نتیجه بازگشت به صورت Tuples بیان می شود:

Tuples که توسط Query بازگردانده شده است ، Tuples نامگذاری شده است که توسط کلاس ROW تهیه می شود و می توان آن را مانند یک شیء معمولی پایتون رفتار کرد. نام ها همان نام ویژگی برای یک ویژگی و نام کلاس برای یک کلاس هستند:

شما می توانید نام عبارات ستون جداگانه را با استفاده از ساخت ColumneLement. Label () کنترل کنید ، که از هر شیء ستون ستونی در دسترس است ، و همچنین هر ویژگی کلاس که به یک نقشه برداری شده است (مانند کاربر. نام):

نامی که به یک نهاد کامل مانند کاربر داده می شود ، با فرض اینکه چندین نهاد در تماس به جلسه وجود دارند. query () ، می توانند با استفاده از aliased () کنترل شوند:

عملیات اساسی با پرس و جو شامل صدور محدودیت و جبران ، به راحتی با استفاده از برش های آرایه پایتون و به طور معمول در رابطه با سفارش توسط:

و نتایج فیلتر ، که یا با filter_by () انجام می شود ، که از آرگومان های کلیدی استفاده می کند:

… یا فیلتر () ، که از سازه های زبان بیان SQL انعطاف پذیر تر استفاده می کند. اینها به شما امکان می دهد از اپراتورهای معمولی پایتون با ویژگی های سطح کلاس در کلاس نقشه برداری خود استفاده کنید:

شیء پرس و جو کاملاً مولد است ، به این معنی که اکثر روش ها به یک شیء پرس و جو جدید باز می گردند که معیارهای بیشتری بر اساس آن اضافه می شود. به عنوان مثال ، برای پرس و جو برای کاربران به نام "ED" با نام کامل "Ed Jones" ، می توانید دو بار با فیلتر () تماس بگیرید ، که با استفاده از معیارها می پیوندد و:

فارکس وکسب درامد...
ما را در سایت فارکس وکسب درامد دنبال می کنید

برچسب : نویسنده : احمد قانع پور بازدید : 66 تاريخ : يکشنبه 20 فروردين 1402 ساعت: :