پس از آنکه مطابق مطلب های پیشین، بوسیله کلاس MetaData و متد ()reflect که مقدار آرگومان bind آن برابر با True است، توانستیم ساختار جدول های پایگاه داده را بدست آوریم. برای بدست آوردن فهرست جدول های پایگاه داده نیز اگر فرض کنیم metadata نام شی کلاس MetaData باشد، پس بوسیله دستور metadata.tables فهرست ساختار جدول ها را بدست آوردیم.

آنچه که تا کنون خواندیم را می توانیم به صورت زیر خلاصه کنیم:

۱ – SqlAlchemy یک ORM است که بدون توجه به نوع پایگاه داده هدف، می توانیم توسط کلاس ها و متدهای آن به اکثر پایگاه داده های مطرح وصل شده و کوئری ها را اجرا کنیم، تنها باید درایور آن پایگاه داده نصب باشد.

۲ – می توانیم به داده های جدول یا چندین جدول موجود در یک پایگاه داده دسترسی داشته باشیم، پس باید ابتدا به پایگاه داده هدف وصل شویم و سپس توسط متدهایی که در این مطلب و مطلب های بعدی می خوانیم، کوئری ها را آماده و به سرور ارسال و نتیجه را دریافت کنیم.

۳ – برای دسترسی به جدول های از قبل موجود، باید از کلاس MetaData استفاده کنیم. در واقع باید ساختار جدول را درون یک متغیر ذخیره کنیم. این ساختار همانطور که در مطلب دسترسی به جدول پایگاه داده در SqlAlchemy گفتیم، شامل کلاس های Table و Column و برخی دیگر از کلاس ها می شود که در ادامه آموزش داده ایم.

پس هم اکنون و پس از دسترسی به ساختار و متا دیتای جدول، می توانیم کوئری های دسترسی و واکشی (SELECT) داده ها را توسط متدهای تعریف شده در SqlAlchemy انجام دهیم. در این مطلب کوئری های SELECT ساده را انجام می دهیم ولی در مطلب های پیش رو کوئری هایی شامل عبارت های WHERE به همراه دیگر عبارت های LIKE, BETWEEN و غیره، مرتب سازی، گروه بندی داده ها و تابع های تجمیعی و الحاق (Join) کردن جدول ها را آموزش می دهیم.

در صورتی که با زبان SQL آشنایی ندارید، دوره برنامه نویسی به زبان SQL را بخوانید.

واکشی داده از جدول با متد ()select از SqlAlchemy

در کدهای زیر می خواهیم بوسیله متد ()select از ماژول sqlalchemy همه سطرهای تمامی ستون های جدول employees را نشان دهیم. به عبارت دیگر دستور زیر برابر با کوئری SELECT * FROM employees استهمانطور که می بینید متد select یک لیست پایتون از نام جدول را دریافت کرده است و به این معنی است که اگر نام جدول را به تنهایی به درون لیست قرار دهیم، متد ()select فرض می کند شما تمامی ستون های آن جدول را می خواهید.

نتیجه اجرای موفق متد ()select یک رشته کوئری است که در این مطبی آنرا درون متغیر s ذخیره کرده ایم. اگر به کد و شکل زیر نگاه کنید، می بنید که می توانیم بوسیله تابع ()str مقدار متغیر s را به یک رشته تبدیل کنیم. حتما این کار را انجام دهید تا از درستی کدهای پایتونی اطمینان کسب کنید، زیرا متدهای نوشته شده به زبان پایتون در SqlAlchemy برای نگاشت و ایجاد کوئری های مناسب پایگاه داده هدف به کار می روند.

در کدهای زیر می بینید که یک متد دیگر را به انتهای متد ()select اضافه کرده ایم و آن متد ()limit است که کاربرد آن شبیه به عبارت LIMIT در زبان SQL است. لطفا به شکل زیر دقت کنید، خواهید دید که متدهای پایتون به دستورهای نگاشت داده شده اند ولی هنوز به سرور پایگاه داده فرستاده نشده اند.

در کد و شکل زیر سپس می بنید که متغیر s به متد ()execute از شی conn فرستاده می شود تا نتیجه آن که شامل صفر، یک یا چندین سطر است در متغیر تازه ای به نام rows ریخته شود. سپس می توانید مطابق ببنید که درون یک حلقه for سطرها نشان داده می شوند.

در کد بالا تنها نام یک تک جدول به متد ()select فرستاده شده است ولی همانطور که خواهیم دید، می توانیم نام یک یا چندین ستون از میان تمامی ستون های یک تک جدول را به آن بفرستیم. در این صورت برای مشخص کردن نام ستون ها، مطابق آنچه که پیش از این توضیح دادیم، باید از خصوصیت c هماند employees.c.first_name کمک بگیریم. در کد زیر تنها ستون های emp_no (شناسه کارمندی)، first_name و last_name (نام و نام خانوادگی) کارمندان نشان داده می شود.

جمع بندی متد ()select

۱این متد برابر با دستور SELECT در زبان SQL است، به عبارت دیگر برای ایجاد کوئری های SELECT از آن باید کمک بگیریم.

۲ورودی متد یک لیست از نام جدول ها یا ستون های جدول است که در ساده ترین حالت تنها نام یک جدول را دریافت می کند و سپس تمامی سطرها را برای تمامی ستون ها نمایش می دهد.

۳می توانیم ستون ها را سفارشی کنیم و برای این کار باید از خصوصیت c کمک بگیریم تا بتوانیم به ستون های جدول دسترسی داشته باشیم.

۴در موارد الحاق (Join) کردن جدول ها، باید نام دو یا چند جدولی که در الحاق شرکت دارند را به لیست متد ()select بفرستیم. همچنین می توانیم از هر این دو یا چند جدول شرکت کننده در الحاق، می توانیم ستون های دلخواه را تعیین کنیم.

۵دلیل اینکه ورودی متد ()select یک لیست پایتون است، اینکه در واقع ورودی دستور SELECT در SQL یک یا چندین یا تمامی ستون های جدول مربوطه است. پس اگر شما نام جدول (یا جدول ها) و یا نام ستون (یا ستون چندین جدول) را بدون لیست به متد ()select بفرستید، خطا نشان داده می شود.

۶در کدهای بالا منظور از جدولی که به متد ()select فرستاده می شود در واقع همان متغیری است که ساختار جدول را بوسیله دستور metadata.tables در خود نگه می دارد که پیش از این در مورد آن در مطلب های پیشین توضیح داده بودیم.

۷حتما از متد ()str برای نمایش و چاپ کردن رشته کوئری ایجاد شده بوسیله متد ()select کمک بگیرید تا از درستی رشته کوئری مطمئن شوید.