در هر پایگاه داده و بسته به آن پایگاه داده (اوراکل یا SQL Server یا MySQL یا PostgresSQL) یک سری از اشیا وجود دارند که جدول و نما (View) دو شی مهم هستند. در این مطلب می خواهیم نشان دهیم که چگونه فهرست تمامی جدول ها و ستون جدول های موجود در یک پایگاه داده از پیش موجود را بدست آوریم.

توجه کنید که باید پیش از اجرای دستورهای زیر به پایگاه داده متصل شده باشید، پس در کدهای زیر متغیر engine همان است که از اجرای متد ()create_engine بدست آمده است. در این مطلب و مطلب بعدی می خواهیم شما را با کلاس هایی به نام MetaData, Table, Column و همچنین دیگر کلاس ها آشنا کنیم. در شکل زیر و به منظور یادآوری چگونگی اتصال گفته شده است.

اگر به شکل زیر دقت کنید می بینید که خروجی خصوصیت های tables و sorted_tables به ترتیب یک تاپل از دیکشنری پایتون و یک لیست است که در این لحظه خالی هستند، زیرا هنوز نگفتیم که برای کدام engine می خواهیم متا دیتاها را بدست آوریم.

پس باید مطابق شکل زیر متد ()reflect را فراخوانی کرده و مقدار True را به آرگومان bind آن بفرستیم تا در این لحظه شی یا متغیر metadata شامل ساختار و متادیتاهای جدولی باشد که پیش از این درون رشته اتصال و متد ()create_engine تعیین کرده بودیم. با توجه به شکل زیر که خروجی دستور metadata.tables است، می توانید ببینید که هر جدول توسط کلاس Table و هر ستون نیز توسط کلاس Column تعریف شده است. همچنین خصوصیت هر یک از ستون ها نیز توسط ویژگی های دیگر درون SqlAlchemy تعریف می شوند که در ادامه مطلب ها به آنها اشاره خواهیم کرد.

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

در شکل زیر نیز خروجی خصوصیت sorted_tables نشان داده شده است. در ادامه مطلب ها توضیح داده ایم که چگونه بوسیله خصوصیت metadata.tables می توانید یک شی ایجاد کنید که آن شی در واقع به جدول پایگاه داده اشاره می کند. در کد و شکل زیر بررسی کرده ایم که آیا جدول های مورد نظر در فهرست جدول های درون شی metadata.tables وجود دارند یا نه؟

در نهایت می توانیم توسط متد ()clean از شی metadata فهرست متادیتاهای بدست آمده را پاک کنیم، پس در شکل زیر خروجی دستور metadata.tables خالی است زیرا پس از دستور ()metadata.clean اجرا شده است.

یکی دیگر از روش ها برای بدست آوردن فهرست جدول های درون یک پایگاه، بکار گیری متد ()inspect است. در کد و شکل زیر می توانید ببنید که نام شی engine به آن فرستاده شده است و سپس در یک حلقه for و بوسیله متد ()get_table_names نام تمامی جدول ها نمایش داده شده است.

دسترسی به یک جدول ویژه

برای دسترسی به یک جدول باید مطابق کد زیر عمل کنید. در کد زیر یک شی (متغیر) به نام employees ایجاد شده است که مقدار کلید employees از خروجی metadata.tables را در خود ذخیره می کند. گفتیم که هر کلید از دیکشنری درون خروجی metadata.tables نام یک جدول و مقدار هر کلید ساختار ستون های جدول را نشان می دهد.

با اجرای دستور بالا، ساختار جدولی به نام employees به صورت کدهای پایتون به درون متغیر employees ریخته می شوند. مطابق کد زیر متغیر employess از نوع کلاس Table است و از این پس می توانیم تمامی عامل دسترسی به داده ها، بروز رسانی داده، حذف داده ها یا افزودن داده های جدید به جدول emplpoyees پایگاه داده از طریق کدهای پایتون، انجام دهیم.

در کد زیر و از طریق خصوصیت columns از کلاس Tables می توانیم فهرست تمامی ستون های جدول را نمایش دهیم. همچنین در کد بعدی می بینید که نوع ستون ها از کلاسی به نام Column است که در ماژول sqlalchemy تعریف شده اند. در مطلب های بعدی از طریق این کلاس های Table و Column جدول ها را ایجاد می کنیم.