در این مطلب و پیش از ادامه آموزش های کتابخانه SQLAlchemy می خواهیم در مورد چگونگی اتصال از طریق درایورهای MySQL برای پایتون به پایگاه داده صحبت کنیم تا هم بتوانیم با چگونگی ارتباط به پایگاه داده از طریق درایور mysql-connector-python آشنا شویم و هم بتوانیم مقایسه ای میان درایورها با SQLAlchemy انجام دهیم.

در کدهای زیر تمامی کتابخانه ها و کلاس های لازم به درون فایل ضمیمه شده اند. هدف این است که یک فایل CSV را که شامل چندین خط است بخوانیم و سپس آنرا درون جدولی از پایگاه داده ذخیره کنیم. از ماژول CSV برای خواندن فایل های CSV استفاده می شود. یک فایل csv ایجاد کنید که هر خط آن شامل شناسه، نام، نام خانوادگی، شماره دپارتمان و نام دپارتمان کارمند باشد. توجه کنید که هر یک از این فیلدها در هر خط باید با علامت ویرگول از هم جدا شوند.

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

در کدهای زیر چهار متغیر ایجاد کرده ایم که هر کدام یک کوئری SQL را در خود نگه می دارند. متغیر create_db_sql یک پایگاه داده به نام emp را در MySQL ایجاد می کند. متغیر select_db_sql همان پایگاه داده قبلی را برای ایجاد جدول ها انتخاب می کند. متغیر create_table_sql جدول را متناسب با هر یک از مقدارهای درون هر خط فایل CSV ایجاد می کند. در نهایت متغیر insert_rows_sql برای درج تمامی خطوط  خوانده شده (به جز خط اول) از فایل CSV به درون جدول استفاده می شود.

حال باید از طریق کلاس MySQLConnection یک اتصال به پایگاه داده ایجاد می کنیم، پس مطابق کدهای زیر متغیر connectionParameters را به تابع سازنده کلاس MySQLConnection می فرستیم. سپس باید توسط کلاس MySQLCursor یک متغیر (در اینجا) به نام cursor ایجاد کنیم. سپس توسط این متغیر به متد ()execute کلاس MySQLCursor دسترسی پیدا کرده و کوئری هایی که درون چهار متغیر بالا تعریف کرده ایم را به ترتیب اجرا می کنیم.

توجه کنید توسط متد ()executemany چندین خط همزمان و توسط کوئری متغیر insert به درون پایگاه داده درج می شوند. توجه کنید ما از [:csvLines[1 استفاده کردیم، زیرا نمی خواهیم خط اول از میان تمامی خط های فایل CSV درون جدول ذخیره شوند. درنهایت در کدها بالا پس از انجام موفق تمامی کوئری ها، متد ()commit را اجرا کردیم تا اثر تراکنش در پایگاه داده دائمی شود. در صورتی که هر مشکلی رخ دهد، مانند تکراری بودن کلید اصلی در کوئری های بعدی، یک خطا نشان داده می شود. توجه کنید در کوئری متغیر create_table_sql ستون emp_no به عنوان کلید اصلی است.

در کدهای زیر با استفاده از همان اتصال قبلی و استفاده از متغیر cursor می خواهیم تمامی سطرهایی را که پیش از این در پایگاه داده درج کرده بودیم را بدست آوریم. پس باید کوئری جدیدی را نوشته و سپس توسط متد ()execute آنرا اجرا کنیم. برای اینکه به نتیجه کوئری اجرا شده دسترسی داشته باشیم، می توانیم در این مطلب از متد ()fetchall از کلاس MySQLCursor تمامی سطرهای بدست آمده را درون متغیری به نام rows بریزیم. در این حالت متغیر rows از نوع ResultSet خواهد بود. در نهایت درون یک حلقه for تمامی سطرهای درون متغیر rows را نشان می دهیم.

متد ()fetchall تمامی سطرها (یا تمامی سطرهای باقی مانده) را از درون متغیر rows واکشی می کند و اگر مجدد و همانند کد زیر بخواهید سطرها را از درون متغیر rows واکشی کنید، پس خطای شکل زیر نشان داده می شود. در انتها باید ابتدا اتصال به پایگاه داده و سپس اتصال cursor را قطع کنید.

آنچه که گفتیم در مورد استفاده از درایورها بود و دیدید که باید به صورت دستی کوئری ها را نوشته و اجرا کنید. در مجموعه ای از مطلب های پیش رو ابتدا روشی را می گوییم که از طریق آن و بوسیله SqlAlchemy به جدول هایی از پیش موجود دسترسی پیدا کنید و تمامی متدهای نوشته شده به زبان پایتون برای اجرای انواع دستو SELECT را پیاده سازی کنید. تنها به یاد داشته باشید که متدهای پایتونی تعریف شده در SqlAlchemy در نهایت به یک کوئری SQL نگاشت داده می شوند.