شعار زيفيرنت

Python و MySQL: مقدمة عملية لتحليل البيانات

التاريخ:

تم نشر هذه المقالة كجزء من مدونة علوم البيانات

المُقدّمة

لنلقِ نظرة على مثال عملي لكيفية عمل استعلامات SQL إلى خادم MySQL من كود Python: CREATE ، SELECT ، UPDATE ، JOIN ، إلخ.

تتفاعل معظم التطبيقات مع البيانات بشكل ما. لذلك ، توفر لغات البرمجة (Python ليست استثناء) أدوات لتخزين مصادر البيانات والوصول إليها. يعد MySQL أحد أروع أنظمة إدارة قواعد البيانات وأكثرها ثراءً (DBMS). احتلت العام الماضي المرتبة الثانية بعد Oracle في تصنيفات قواعد البيانات.

باستخدام الأساليب الموضحة في هذا البرنامج التعليمي ، يمكنك دمج قاعدة بيانات MySQL بشكل فعال في تطبيق Python الخاص بك. في هذا البرنامج التعليمي ، سنطور قاعدة بيانات MySQL صغيرة لنظام تصنيف الأفلام ونتعلم كيفية الحصول على البيانات منه باستخدام كود Python.

ما سوف تعرفه بعد هذا البرنامج التعليمي هو:

  • قم بتوصيل تطبيقك بقاعدة بيانات MySQL

  • استرجاع البيانات عبر استعلام عن البيانات المطلوبة من قاعدة البيانات

  • معالجة الاستثناءات التي تم طرحها عند الوصول إلى قاعدة البيانات

لتحقيق أقصى استفادة من هذا البرنامج التعليمي ، من المستحسن أن يكون لديك معرفة عملية بمفاهيم Python مثل الحلقات والوظائف ومعالجة الاستثناءات. يجب أن يكون لديك أيضًا فهم أساسي لاستعلامات SQL ، مثل و و. لـ SELECT DROP CREATE JOIN

مقارنة MySQL بقواعد بيانات SQL أخرى

SQL لتقف على لغة الاستعلام الهيكلية هي لغة برمجة مستخدمة على نطاق واسع لإدارة قواعد البيانات العلائقية. ربما تكون قد سمعت عن العديد من قواعد البيانات القائمة على SQL: MySQL و PostgreSQL و SQLite و SQL Server. تتوافق جميع قواعد البيانات هذه مع معايير SQL ولكنها تختلف في التفاصيل.

نظرًا لشفرة MySQL مفتوحة المصدر ، سرعان ما أصبحت رائدة السوق في حلول SQL. تستخدم MySQL حاليًا معظم شركات التكنولوجيا الشهيرة مثل Google و LinkedIn و Uber و Netflix و Twitter والمزيد.

إلى جانب الدعم المقدم من مجتمع المصادر المفتوحة ، هناك أسباب أخرى لنجاح MySQL:

  1. سهل التثبيت - تم تصميم MySQL ليكون سهل الاستخدام. قاعدة البيانات سهلة الإنشاء والتخصيص. يتوفر MySQL لأنظمة التشغيل الرئيسية بما في ذلك Windows و macOS و Linux و Solaris.

  2. Speed- تتمتع MySQL بسمعة طيبة لكونها حلاً سريعًا لقواعد البيانات. يتطور نظام إدارة قواعد البيانات (DBMS) أيضًا بشكل جيد.

  3. حقوق المستخدم والأمان - تسمح لك MySQL بتعيين مستويات أمان كلمة المرور وإضافة وإزالة الامتيازات إلى حسابات المستخدمين. تبدو إدارة حقوق المستخدم أبسط بكثير مما هي عليه في العديد من نظم إدارة قواعد البيانات الأخرى مثل PostgreSQL ، حيث تتطلب إدارة ملفات التكوين بعض المهارة.

تثبيت MySQL Server و MySQL Connector

MySQL Server و MySQL Connector هما البرنامجان الوحيدان اللذان تحتاجهما لبدء هذا البرنامج التعليمي. سيوفر MySQL Server الموارد اللازمة للعمل مع قاعدة البيانات. بعد بدء تشغيل الخادم ، يجب أن تكون قادرًا على توصيل تطبيق Python به باستخدام MySQL Connector / Python.

تثبيت خادم MySQL

توضح الوثائق الرسمية الطرق الموصى بها لتنزيل MySQL Server وتثبيته. هناك تعليمات لجميع أنظمة التشغيل الشائعة ، بما في ذلك Windows و macOS و Solaris و Linux وغيرها الكثير.

بالنسبة لنظام التشغيل Windows ، فإن أفضل رهان لك هو تنزيل مُثبِّت MySQL والسماح له بتنفيذ العملية. سيساعدك مدير التثبيت أيضًا في تكوين إعدادات الأمان لخادم MySQL. في صفحة الحسابات ، ستحتاج إلى إدخال كلمة مرور لحساب الجذر ، وإذا رغبت في ذلك ، فأضف مستخدمين آخرين بامتيازات مختلفة.

إنشاء حساب MySQLإنشاء حساب MySQL

يمكن تخصيص أدوات مفيدة أخرى مثل MySQL Workbench باستخدام أدوات التثبيت. بديل مناسب للتثبيت على نظام التشغيل هو نشر MySQL باستخدام Docker.

تثبيت MySQL Connector / Python

برنامج تشغيل قاعدة البيانات - برنامج يسمح لتطبيق ما بالاتصال بنظام DBMS والتفاعل معه. يتم توفير برامج التشغيل هذه عادةً كوحدات نمطية منفصلة. الواجهة القياسية التي يجب أن تتوافق معها جميع برامج تشغيل قاعدة بيانات Python موصوفة في PEP 249. لتثبيت برنامج التشغيل (الموصل) ، سنستخدم مدير الحزم: pip

نقطة تثبيت mysql- موصل- بيثون

ستعمل نقطة على تثبيت الموصل في البيئة النشطة حاليًا. للعمل مع مشروع منعزل ، نوصي بإعداد بيئة افتراضية.

دعنا نتحقق من نتيجة التثبيت عن طريق تشغيل الأمر التالي في محطة Python:

استيراد mysql.connector

إذا تم تشغيل جملة الاستيراد بدون أخطاء ، فسيتم تثبيتها بنجاح وجاهزة للاستخدام. موصل MySQL

إنشاء اتصال بخادم MySQL

MySQL هو نظام لإدارة قواعد البيانات من جانب الخادم. يمكن أن يحتوي خادم واحد على قواعد بيانات متعددة. للتفاعل مع قاعدة البيانات ، يجب علينا إنشاء اتصال بالخادم. يبدو التفاعل خطوة بخطوة لبرنامج Python مع قاعدة بيانات تستند إلى MySQL كما يلي:

  1. نحن نتصل بخادم MySQL.

  2. نقوم بإنشاء قاعدة بيانات جديدة (إذا لزم الأمر).

  3. نحن نتصل بقاعدة البيانات.

  4. نقوم بتنفيذ استعلام SQL ، وجمع النتائج.

  5. نبلغ قاعدة البيانات إذا تم إجراء تغييرات على الجدول.

  6. أخيرًا ، أغلق الاتصال بخادم MySQL.

مهما كان التطبيق ، فإن الخطوة الأولى هي ربط التطبيق وقاعدة البيانات معًا.

الاتصال بخادم MySQL من Python

لإنشاء اتصال ، استخدم الوحدة. تأخذ هذه الوظيفة المعلمات ، وتقوم بإرجاع كائن. يمكن الحصول على بيانات الاعتماد نتيجة لإدخال من المستخدم: connect () mysql.connector كلمة مرور المستخدم المضيف MySQLConnection

من getpass import getpass من mysql.connector import connect ، حاول الخطأ: مع connect (host = "localhost" ، user = input ("Username:") ، password = getpass ("Password:") ،) كاتصال: طباعة (اتصال ) باستثناء خطأ مثل e: print (e)

يتم تخزين الكائن في متغير سنستخدمه للوصول إلى خادم MySQL. بعض النقاط المهمة: اتصال MySQLConnection

  • لف جميع اتصالات قاعدة البيانات في كتل. سيؤدي ذلك إلى تسهيل التعرف على أي استثناءات وفحصها. حاول… ما عدا

  • تذكر إغلاق الاتصال بعد الانتهاء من الوصول إلى قاعدة البيانات. تؤدي الاتصالات المفتوحة غير المستخدمة إلى أخطاء غير متوقعة ومشاكل في الأداء. يستخدم الكود مدير السياق (مع… as…) لهذا الغرض.

  • يجب ألا تقوم أبدًا بتضمين بيانات الاعتماد (اسم المستخدم وكلمة المرور) في شكل سلسلة في نص برمجي بايثون. هذه ممارسة نشر سيئة وتشكل مخاطرة أمنية خطيرة. يطلب الرمز أعلاه بيانات اعتماد تسجيل الدخول الخاصة بك. لهذا الغرض ، يتم استخدام وحدة مدمجة لإخفاء كلمة المرور التي تم إدخالها.

لذلك ، أنشأنا اتصالًا بين برنامجنا وخادم MySQL. الآن تحتاج إما إلى إنشاء قاعدة بيانات جديدة أو الاتصال بقاعدة موجودة.

قم بإنشاء قاعدة بيانات جديدة

لإنشاء قاعدة بيانات جديدة ، على سبيل المثال باسم ، تحتاج إلى تنفيذ جملة SQL: online_movie_rating

إنشاء قاعدة بيانات online_movie_rating ؛

ملاحظات

يتطلب منك MySQL وضع فاصلة منقوطة (😉 في نهاية الجملة. ومع ذلك ، يضيف MySQL Connector / Python تلقائيًا فاصلة منقوطة في نهاية كل استعلام.

لتنفيذ استعلام SQL ، نحتاج إلى مؤشر يلخص عملية الوصول إلى سجلات قاعدة البيانات. يوفر MySQL Connector / Python فئة مقابلة ، يُطلق على مثيلها أيضًا اسم المؤشر. MySQLCursor

دعنا نمرر طلبنا لإنشاء قاعدة بيانات: online_movie_rating

جرب: مع connect (host = "localhost" ، user = input ("Username:") ، password = getpass ("Password:") ،) كاتصال: create_db_query = "CREATE DATABASE online_movie_rating" باستخدام connection.cursor () كمؤشر : cursor.execute (create_db_query) باستثناء خطأ مثل e: print (e)

يتم تخزين الطلب كسلسلة في متغير ثم يتم تمريره للتنفيذ إلى CREATE DATABASE create_db_query cursor.execute ()

في حالة وجود قاعدة بيانات بالاسم نفسه بالفعل على الخادم ، فسنستلم رسالة خطأ. باستخدام نفس الكائن كما كان من قبل ، فلنقم بتشغيل استعلام لرؤية جميع الجداول المخزنة في قاعدة البيانات: MySQLConnection SHOW DATABASES

جرب: مع connect (host = "localhost" ، user = input ("Username:") ، password = getpass ("Password:") ،) كاتصال: show_db_query = "SHOW DATABASES" باستخدام connection.cursor () كمؤشر: cursor.execute (show_db_query) لـ db في المؤشر: print (db) باستثناء Error as e: print (e)

OUTPUT

أدخل اسم المستخدم: الجذر

أدخل كلمة المرور: ········

('information_schema'،)

('mysql'،)

("online_movie_rating"،)

("مخطط الأداء" ،)

('sys'،)

سيقوم الكود أعلاه بطباعة أسماء جميع قواعد البيانات الموجودة على خادم MySQL الخاص بنا. قام الأمر الموجود في مثالنا أيضًا بتفريغ قواعد البيانات التي تم إنشاؤها تلقائيًا بواسطة خادم MySQL وتوفير الوصول إلى البيانات الوصفية لقاعدة البيانات وإعدادات الخادم. اعرض قواعد البيانات

الاتصال بقاعدة بيانات موجودة

لذلك ، أنشأنا قاعدة بيانات تسمى. للاتصال به ، نقوم ببساطة بتكميل المكالمة بمعامل: online_movie_rating connect () database

جرب: مع connect (host = "localhost"، user = input ("Username:")، password = getpass ("Password:")، database = "online_movie_rating"،) كاتصال: طباعة (اتصال) باستثناء الخطأ مثل e: طباعة (هـ)

إنشاء وتعديل وإفلات الجداول

في هذا القسم ، نناقش كيفية استخدام Python لإجراء بعض الاستعلامات الأساسية: "و" و "." إنشاء تغيير إسقاط الجدول

تحديد مخطط قاعدة البيانات

لنبدأ بإنشاء مخطط قاعدة بيانات لنظام تصنيف الأفلام. خذ قاعدة البيانات المكونة من ثلاثة جداول:

1. الافلام- معلومات عامة عن الافلام:

  • Id

  • +

  • لقب

  • سنة الإصدار

  • نوع

  • Collection_in_mi

2. المراجعين- معلومات عن الأشخاص الذين نشروا تصنيفات الأفلام:

  1. id

  2. الاسم الاول

  3. الكنية

3. التصنيفات- معلومات حول تصنيفات الأفلام من قبل المراجعين:

  1. movie_id (مفتاح خارجي)

  2. reviewer_id (مفتاح خارجي)

  3. تصنيف

هذه الجداول الثلاثة كافية لأغراض هذا الدليل.

مخطط نظام تصنيف الفيلممخطط نظام تصنيف الفيلم

ترتبط الجداول الموجودة في قاعدة البيانات ببعضها البعض: يجب أن يكون للأفلام والمراجعين علاقة أطراف بأطراف: يمكن عرض فيلم واحد بواسطة عدة مراجعين ، ويمكن لمراجع واحد مراجعة أفلام متعددة. تربط تقييمات الجدول جدول الأفلام بجدول المراجع.

إنشاء الجداول باستخدام عبارة CREATE TABLE

لإنشاء جدول جديد في MySQL ، نحتاج إلى استخدام عامل التشغيل. سيقوم استعلام MySQL التالي بإنشاء جدول قاعدة البيانات الخاص بنا: CREATE TABLE movies online_movie_rating

CREATE TABLE movies (id INT AUTO_INCREMENT PRIMARY KEY، title VARCHAR (100)، release_year YEAR (4)، genre VARCHAR (100)، collection_in_mil INT) ؛

إذا واجهت SQL من قبل ، فسوف تفهم معنى الاستعلام أعلاه. تتميز لهجة MySQL ببعض السمات المميزة. على سبيل المثال ، تقدم MySQL مجموعة واسعة من أنواع البيانات ، بما في ذلك ، وما إلى ذلك. بالإضافة إلى ذلك ، تستخدم MySQL الكلمة الأساسية عندما يجب زيادة قيمة العمود تلقائيًا عند إدراج سجلات جديدة. عام INT BIGINT AUTO_INCREMENT

لإنشاء جدول ، تحتاج إلى تمرير الاستعلام المحدد إلى cursor.execute ()

create_movies_table_query = "" "إنشاء أفلام TABLE (معرف INT AUTO_INCREMENT PRIMARY KEY ، العنوان VARCHAR (100) ، Release_year YEAR (4) ، النوع VARCHAR (100) ، collection_in_mil INT)" "" مع connect.cursor () كمؤشر: المؤشر. تنفيذ (create_movies_table_query) connection.commit ()

انتبه إلى عامل التشغيل. بشكل افتراضي ، لا يقوم موصل MySQL بتنفيذ المعاملات تلقائيًا. في MySQL ، لا تحدث التعديلات المذكورة في المعاملة إلا عندما نستخدم الأمر في النهاية. لإجراء تغييرات على جدول ، استدع هذه الطريقة دائمًا بعد كل معاملة. connect.commit () COMMIT

دعنا نكرر الإجراء الخاص بالجدول: المراجعين

create_reviewers_table_query = "" "

CREATE TABLE المراجعين (id INT AUTO_INCREMENT PRIMARY KEY، first_name VARCHAR (100)، last_name VARCHAR (100)) "" "مع connection.cursor () كمؤشر: cursor.execute (create_reviewers_table_query) connect.commit () أخيرًا ، لنقم بإنشاء تقييمات الجدول: create_ratings_table_query = "" تقييمات CREATE TABLE (movie_id INT، reviewer_id INT، تصنيف DECIMAL (2,1،XNUMX)، FOREIGN KEY (movie_id) REFERENCES movies (id)، FOREIGN KEY (reviewer_id) REFERENCES المراجعين (id)، PRIMARY KEY (movie_id، reviewer_id)) "" "مع connection.cursor () كمؤشر: cursor.execute (create_ratings_table_query) connection.commit ()

يختلف تنفيذ علاقات المفاتيح الخارجية في MySQL قليلاً وله قيود مقارنة بـ SQL القياسي. في MySQL ، يجب أن يستخدم كل من الأصل والفرع للمفتاح الخارجي نفس محرك التخزين - مكون البرنامج الأساسي الذي يستخدمه نظام إدارة قاعدة البيانات لأداء عمليات SQL. تقدم MySQL نوعين من هذه الآليات:

  1. تعد محركات تخزين المعاملات آمنة للمعاملات وتسمح لك باستعادة المعاملات باستخدام أوامر بسيطة مثل. تندرج العديد من محركات MySQL الشهيرة ضمن هذه الفئة ، بما في ذلك InnoDB و NDB. التراجع

  2. تعتمد محركات التخزين غير الخاصة بالمعاملات على التعليمات البرمجية اليدوية للتراجع عن العبارات الملتزمة بقاعدة البيانات. هذه ، على سبيل المثال ، MyISAM و MEMORY.

InnoDB هو محرك التخزين الافتراضي الأكثر شيوعًا. من خلال فرض قيود المفتاح الخارجي ، فإنه يساعد في الحفاظ على تكامل البيانات. هذا يعني أن أي عملية CRUD للمفتاح الخارجي يتم فحصها مسبقًا للتأكد من أنها لا تؤدي إلى عدم تناسق بين الجداول المختلفة.

لاحظ أن الجدول يستخدم أعمدة ومفتاحين خارجيين ، يعملان معًا كمفتاح أساسي. تضمن هذه الميزة عدم تمكن المراجع من تقييم الفيلم نفسه مرتين. تصنيفات movie_id reviewer_id

يمكن استخدام نفس المؤشر لعدة مرات. في هذه الحالة ، ستصبح جميع المكالمات معاملة ذرية واحدة. على سبيل المثال ، يمكنك تنفيذ جميع العبارات بمؤشر واحد ، ثم تنفيذ المعاملة مرة واحدة:

إنشاء جدول باستخدام connection.cursor () كمؤشر: cursor.execute (create_movies_table_query) cursor.execute (create_reviewers_table_query)

عرض مخطط الجدول باستخدام عبارة DESCRIBE

لقد أنشأنا ثلاثة جداول ويمكننا عرض المخطط باستخدام عامل التشغيل. يصف

بافتراض أن لديك بالفعل كائنًا في متغير ، يمكننا طباعة النتائج التي تم الحصول عليها. تسترد هذه الطريقة جميع الأسطر من آخر جملة تم تنفيذها: MySQLConnection connect cursor.fetchall ()

show_table_query = "وصف الأفلام" باستخدام connection.cursor () كمؤشر: cursor.execute (show_table_query) # إحضار الصفوف من نتيجة الاستعلام الأخيرة المنفذة = cursor.fetchall () للصف في النتيجة: طباعة (صف)

OUTPUT

('id'، 'int (11)'، 'NO'، 'PRI'، None، 'auto_increment')

("العنوان" ، "varchar (100)" ، "نعم" ، "، بلا ،")

("release_year"، "year (4)"، "YES"، "، None،")

("النوع" ، "varchar (100)" ، "نعم" ، "، بلا ،")

("collection_in_mil"، "int (11)"، "YES"، "، None،")

بعد تنفيذ الكود أعلاه ، يجب أن نحصل على جدول يحتوي على معلومات حول الأعمدة في الجدول. لكل عمود ، يتم عرض معلومات حول نوع البيانات ، وما إذا كان العمود مفتاحًا أساسيًا ، وما إلى ذلك. أفلام

تغيير مخطط الجدول باستخدام عبارة ALTER

يحتوي عمود الاسم في الجدول على شباك التذاكر الخاص بالفيلم بملايين الدولارات. يمكننا كتابة بيان MySQL التالي لتغيير نوع البيانات للسمة من collection_in_mil movies collection_in_mil INT DECIMAL

ALTER TABLE أفلام تعديل COLUMN collection_in_mil DECIMAL (4,1،XNUMX) ؛

يشير DECIMAL (4,1،120.1) إلى رقم عشري ، يمكن أن يحتوي على أربعة أرقام كحد أقصى ، والتي يتوافق أحدها مع التفريغ العاشر ، على سبيل المثال ، وهكذا. د. 3.4 38.0 XNUMX

alter_table_query = "" "ALTER TABLE movies MODIFY COLUMN collection_in_mil DECIMAL (4,1،11)" "" show_table_query = "DESCRIBE movies" مع connection.cursor () كمؤشر: cursor.execute (alter_table_query) cursor.execute (show_table_query) # Get rows من نتيجة الاستعلام الأخير التي تم تنفيذها = cursor.fetchall () طباعة ("مخطط جدول الفيلم بعد التعديل:") للصف الناتج: طباعة (صف) مخطط جدول الفيلم بعد إجراء التغييرات: ('id'، 'int (100) '،' NO '،' PRI '، بلا،' auto_increment ') (' title '،' varchar (4) '،' YES '،' '، None،' ') (' release_year '،' year (100) '،' YES '،' '، None،' ') (' genre '،' varchar (4,1) '،' YES '،' '، None،' ') (' collection_in_mil '،' decimal (XNUMX،XNUMX) '،' YES '،' '، None،' ')

كما هو موضح في الإخراج ، غيرت السمة نوعها أيضًا. لاحظ أنه في الكود أعلاه ، نقوم بالاتصال مرتين ، لكننا نحصل فقط على صفوف من أحدث استعلام تم تنفيذه ، وهو. collection_in_mil DECIMAL (4,1،XNUMX) cursor.execute () cursor.fetchall () show_table_query

إسقاط الجداول باستخدام عبارة DROP

لحذف الجداول ، استخدم عامل التشغيل. إسقاط الطاولة عملية لا رجوع فيها. إذا قمت بتشغيل الكود أدناه ، فستحتاج إلى استدعاء الاستعلام على الجدول مرة أخرى: DROP TABLE CREATE TABLE rating

drop_table_query = "تصنيفات DROP TABLE" مع connection.cursor () كمؤشر: cursor.execute (drop_table_query)

إدراج السجلات في الجداول

دعونا نملأ الجداول بالبيانات. في هذا القسم ، سننظر في طريقتين لإدخال السجلات باستخدام MySQL Connector في كود Python.

تعمل الطريقة الأولى بشكل جيد عندما يكون عدد السجلات صغيرًا. الخيار الثاني هو الأنسب لسيناريوهات الحياة الواقعية. .execute () .executemany ()

إدخال السجلات باستخدام .execute ()

يستخدم الأسلوب الأول نفس الطريقة التي استخدمناها حتى الآن. نكتب طلبًا ونرسله إلى cursor.execute () INSERT IGNORE INTO cursor.execute ()

insert_movies_query = "" "إدراج IGNORE INTO أفلام (العنوان ، الإصدار_عام ، النوع ، collection_in_mil) VALUES (" Forrest Gump "، 1994 ،" الدراما "، 330.2) ، (" 3 Idiots "، 2009 ،" Drama "، 2.4) ، ( "Eternal Sunshine of the Spotless Mind" ، 2004 ، "Drama" ، 34.5) ، ("Good Will Hunting" ، 1997 ، "Drama" ، 138.1) ، ("Skyfall" ، 2012 ، "Action" ، 304.6) ، (" Gladiator "، 2000،" Action "، 188.7)، (" Black "، 2005،" Drama "، 3.0)، (" Titanic "، 1997،" Romance "، 659.2)، (" The Shawshank Redemption "، 1994،" دراما ، 28.4) ، ("Udaan" ، 2010 ، "Drama" ، 1.5) ، ("Home Alone" ، 1990 ، "Comedy" ، 286.9) ، ("Casablanca" ، 1942 ، "Romance" ، 1.0) ، ( "Avengers: Endgame" ، 2019 ، "Action" ، 858.8) ، ("Night of the Living Dead" ، 1968 ، "Horror" ، 2.5) ، ("The Godfather ، 1972 ،" Crime "، 135.6) ، (" Haider "، 2014،" Action "، 4.2)، (" Inception "، 2010،" Adventure "، 293.7)، (" Evil "، 2003،" Horror "، 1.3)، (" Toy Story 4 "، 2019،" رسوم متحركة "، 434.9) ، (" إير فورس وان "، 1997 ،" دراما "، 138.1) ، (" The Dark Knight "، 2008 ،" أكشن "، 535.4) ، (" Bhaag Milkha Bhaag "، 2013 ،" Sport " ، 4.1. 1994) ، ("The Lion King" ، 423.6 ، "Animation" ، 1994) ، ("Pulp Fiction" ، 108.8 ، "Crime" ، 2013) ، ("Kai Po Che" ، 6.0 ، "Sport" ، 2015) ، ("Beasts of No Nation" ، 1.4 ، "War" ، 2018) ، ("Andadhun" ، 2.9 ، "Thriller" ، 1991) ، ("The Silence of the Lambs" ، 68.2 ، "Crime" ، 2016) ، ( "Deadpool"، 363.6، "Action"، 2015)، ("Drishyam"، 3.0، "Mystery"، XNUMX) "" "مع connection.cursor () كمؤشر: cursor.execute (insert_movies_query) connection.commit ()

الجدول مليء الآن بثلاثين إدخالاً. في النهاية ، يستدعي الرمز. تذكر أن تتصل بعد إجراء أي تغييرات على الجدول. أفلام connect.commit () .commit ()

إدخال السجلات باستخدام .executemany ()

الطريقة السابقة مناسبة تمامًا للسجل الأصغر الذي يمكن إدراجه بسهولة عبر الكود. ولكن عادةً ما يتم تخزين البيانات في ملف أو إنشاؤها بواسطة برنامج نصي آخر. هنا حيث يكون مفيدًا. تأخذ الطريقة معلمتين: executemany ()

  1. استعلام يحتوي على عناصر نائبة للسجلات المراد إدراجها.

  2. قائمة السجلات المراد إدراجها.

لنأخذ نهجًا لملء الجدول: المراجعون

insert_reviewers_query = "" "إدراج IGNORE INTO المراجعين (الاسم_الأول ، الاسم_الأخير) VALUES (٪ s،٪ s)" "" reviewers_records = [("Chaitanya" ، "Baweja") ، ("Mary" ، "Cooper") ، (" جون ، "واين") ، ("توماس" ، "ستونمان") ، ("بيني" ، "هوفستاتر") ، ("ميتشل" ، "مارش") ، ("وايت" ، "سكاجز") ، (" Andre "،" Veiga ") ، (" Sheldon "،" Cooper ") ، (" Kimbra "،" Masters ") ، (" Kat "،" Dennings ") ، (" Bruce "،" Wayne ") ، (" دومينغو ، "كورتيس") ، ("راجيش" ، "كوثرابالي") ، ("بن" ، "جلوكر") ، ("ماهيندر" ، "دوني") ، ("أكبر" ، "خان") ، (" Howard "،" Wolowitz ") ، (" Pinkie "،" Petit ") ، (" Gurkaran "،" Singh ") ، (" Amy "،" Farah Fowler ") ، (" Marlon "،" Crafford ") ،] باستخدام connection.cursor () كمؤشر: cursor.executemany (insert_reviewers_query، reviewers_records) connection.commit ()

يأخذ هذا الرمز عناصر نائبة لسلسلتين تم إدراجهما في. تعمل العناصر النائبة كمحددات تنسيق وتساعد على حجز مساحة لمتغير داخل سلسلة. ٪ s insert_reviewers_query

دعنا نملأ الجدول بنفس الطريقة: التصنيفات

insert_ratings_query = "" "إدراج تقييمات IGNORE INTO (التصنيف ، معرف الفيلم ، معرف المراجع) VALUES (٪ s ،٪ s ،٪ s)" "" التصنيفات_السجلات = [(6.4 ، 17 ، 5) ، (5.6 ، 19 ، 1) ، ( 6.3 ، 22 ، 14) ، (5.1 ، 21 ، 17) ، (5.0 ، 5 ، 5) ، (6.5 ، 21 ، 5) ، (8.5 ، 30 ، 13) ، (9.7 ، 6 ، 4) ، (8.5 ، 24 ، 12) ، (9.9 ، 14 ، 9) ، (8.7 ، 26 ، 14) ، (9.9 ، 6 ، 10) ، (5.1 ، 30 ، 6) ، (5.4 ، 18 ، 16) ، (6.2 ، 6 ، 20) ، (7.3 ، 21 ، 19) ، (8.1 ، 17 ، 18) ، (5.0 ، 7 ، 2) ، (9.8 ، 23 ، 3) ، (8.0 ، 22 ، 9) ، (8.5 ، 11 ، 13) ، (5.0 ، 5 ، 11) ، (5.7 ، 8 ، 2) ، (7.6 ، 25 ، 19) ، (5.2 ، 18 ، 15) ، (9.7 ، 13 ، 3) ، (5.8 ، 18 ، 8) ، ( 5.8 ، 30 ، 15) ، (8.4 ، 21 ، 18) ، (6.2 ، 23 ، 16) ، (7.0 ، 10 ، 18) ، (9.5 ، 30 ، 20) ، (8.9 ، 3 ، 19) ، (6.4 ، 12 ، 2) ، (7.8 ، 12 ، 22) ، (9.9 ، 15 ، 13) ، (7.5 ، 20 ، 17) ، (9.0 ، 25 ، 6) ، (8.5 ، 23 ، 2) ، (5.3 ، 30 ، 17) ، (6.4 ، 5 ، 10) ، (8.1 ، 5 ، 21) ، (5.7 ، 22 ، 1) ، (6.3 ، 28 ، 4) ، (9.8 ، 13 ، 1)] مع connect.cursor () المؤشر: cursor.executemany (insert_ratings_query، rating_records) connection.commit ()

تمتلئ الآن جميع الجداول الثلاثة بالبيانات. الخطوة التالية هي معرفة كيفية التفاعل مع قاعدة البيانات هذه.

قراءة السجلات من قاعدة البيانات

حتى الآن ، قمنا فقط بإنشاء عناصر قاعدة البيانات. حان الوقت لتشغيل بعض الاستعلامات والعثور على الخصائص التي نهتم بها. في هذا القسم ، سوف نتعلم كيفية قراءة السجلات من جداول قاعدة البيانات باستخدام عامل التشغيل. تحديد

قراءة السجلات مع جملة SELECT

للحصول على السجلات ، تحتاج إلى الإرسال إلى الطلب وإرجاع النتيجة باستخدام: cursor.execute () SELECT cursor.fetchall ()

select_movies_query = "SELECT * FROM movies LIMIT 5" مع connection.cursor () كمؤشر: cursor.execute (select_movies_query) نتيجة = cursor.fetchall () للصف في النتيجة: طباعة (صف)

OUTPUT

(1 ، "Forrest Gump" ، 1994 ، "دراما" ، عشري ("330.2"))

(2، "3 Idiots"، 2009، "دراما"، عشري ('2.4'))

(3 ، "Eternal Sunshine of the Spotless Mind" ، 2004 ، "دراما" ، عشري ('34.5 .XNUMX '))

(4 ، "Good Will Hunting" ، 1997 ، "دراما" ، عشري (138.1 "))

(5 ، "Skyfall" ، 2012 ، "إجراء" ، عشري ("304.6"))

المتغير يحتوي على السجلات التي تم إرجاعها. إنها قائمة من المجموعات التي تمثل السجلات الفردية في جدول. النتيجة .fetchall ()

في الاستعلام أعلاه ، نستخدم كلمة أساسية للحد من عدد الصفوف المستلمة من عامل التشغيل. غالبًا ما يستخدم المطورون لترقيم المخرجات عند معالجة كميات كبيرة من البيانات. حدد حد التحديد

في MySQL ، يمكن تمرير وسيطين رقميين غير سالبين إلى عامل التشغيل: LIMIT

حدد * من الأفلام بحد 2,5 ؛

عند استخدام وسيطتين رقميتين ، تحدد الأولى إزاحة ، والتي تكون في هذا المثال 2 ، وتحد الثانية من عدد الصفوف التي تم إرجاعها إلى 5. أي أن الاستعلام من المثال سيعيد الصفوف من 3 إلى 7.

select_movies_query = "SELECT title، release_year from movies LIMIT 2، 5" مع connection.cursor () كمؤشر: cursor.execute (select_movies_query) للصف في cursor.fetchall (): print (row)

OUTPUT

('Eternal Sunshine of the Spotless Mind' ، 2004)

('Good Will Hunting' ، 1997).

("Skyfall" ، 2012)

("المصارع" ، 2000)

("بلاك" ، 2005)

نتائج التصفية باستخدام WHERE

يمكن أيضًا تصفية إدخالات الجدول باستخدام. للحصول على جميع الأفلام التي يزيد حجم شباك التذاكر فيها عن 300 مليون دولار ، قم بإجراء الاستعلام التالي: WHERE

select_movies_query = "" "SELECT title، collection_in_mil from movies WHERE collection_in_mil> 300 ORDER BY collection_in_mil DESC" "" مع connection.cursor () كمؤشر: cursor.execute (select_movies_query) للفيلم في cursor.fetchall (): طباعة (فيلم) ('Avengers: Endgame'، Decimal ('858.8')) ('Titanic'، Decimal ('659.2')) ('The Dark Knight'، Decimal ('535.4')) ('Toy Story 4'، Decimal (' 434.9 ')) (' The Lion King '، عشري (' 423.6 ')) (' Deadpool '، عشري (' 363.6 ')) (' Forrest Gump '، عشري (' 330.2 ')) (' Skyfall '، عشري ( "304.6"))

تسمح لك العبارة في الاستعلام بفرز الرسوم من الأعلى إلى الأقل. ترتيب حسب

يوفر MySQL العديد من عمليات تنسيق السلسلة مثل تسلسل السلسلة. على سبيل المثال ، عادةً ما يتم عرض عناوين الأفلام جنبًا إلى جنب مع سنة الإصدار لتجنب الالتباس. دعنا نحصل على أسماء الخمسة أفلام الأكثر ربحًا مع تواريخ إصدارها: CONCAT

select_movies_query = "" "SELECT CONCAT (title،" ("، release_year،") ")، collection_in_mil من الأفلام ORDER BY collection_in_mil DESC LIMIT 5" "" مع connection.cursor () كمؤشر: cursor.execute (select_movies_query) للفيلم في cursor.fetchall (): طباعة (فيلم)

OUTPUT

('Avengers: Endgame (2019)' ، عشري ('858.8'))

("تايتانيك (1997)" ، عشري ("659.2"))

("The Dark Knight (2008)" ، العدد العشري ("535.4"))

('Toy Story 4 (2019)'، Decimal ('434.9'))

("الأسد الملك (1994)" ، عشري ("423.6"))

إذا كنت لا ترغب في الاستخدام ولا تحتاج إلى الحصول على جميع السجلات ، فيمكنك استخدام طرق المؤشر و: LIMIT .fetchone () .fetchmany ()

  • .fetchone () يسترجع الصف التالي من النتيجة على هيئة مجموعة ، أو إذا لم يكن هناك المزيد من الصفوف المتاحة. لا أحد

  • .fetchmany () يسترجع قائمة بمجموعة الصفوف التالية كمجموعة. للقيام بذلك ، يتم تمرير وسيطة إليه ، والتي تكون افتراضيًا 1. إذا لم يكن هناك المزيد من الصفوف المتاحة ، تقوم الطريقة بإرجاع قائمة فارغة.

مرة أخرى ، استخرج عناوين الخمسة أفلام الأعلى ربحًا حسب السنة ، ولكن هذه المرة باستخدام: .fetchmany ()

select_movies_query = "" "SELECT CONCAT (title،" ("، release_year،") ")، collection_in_mil من الأفلام ORDER BY collection_in_mil DESC" "مع connection.cursor () كمؤشر: cursor.execute (select_movies_query) للفيلم في المؤشر .fetchmany (الحجم = 5): طباعة (فيلم) cursor.fetchall ()

OUTPUT

('Avengers: Endgame (2019)' ، عشري ('858.8'))

("تايتانيك (1997)" ، عشري ("659.2"))

("The Dark Knight (2008)" ، العدد العشري ("535.4"))

('Toy Story 4 (2019)'، Decimal ('434.9'))

("الأسد الملك (1994)" ، عشري ("423.6"))

ربما لاحظت وجود تحدٍ إضافي. نقوم بذلك لتنظيف أي نتائج متبقية غير مقروءة. cursor.fetchall () .fetchmany ()

قبل تنفيذ أي عبارات أخرى على نفس الاتصال ، يجب عليك مسح أي نتائج غير مقروءة. خلاف ذلك ، يتم طرح استثناء. خطأ داخلي

الانضمام إلى جداول متعددة

لمعرفة أسماء الخمسة أفلام الأعلى تقييمًا ، قم بتشغيل الاستعلام التالي:

select_movies_query = "" "حدد العنوان ، AVG (التقييم) كمعدل معدل من التصنيفات INNER JOIN movies.id = rating.movie_id GROUP BY movie_id ORDER BY average_rating DESC LIMIT 5" "" مع connection.cursor () كمؤشر: المؤشر. نفذ (select_movies_query) للفيلم في cursor.fetchall (): print (movie)

OUTPUT

('ليلة الموتى الأحياء' ، العدد العشري ('9.90000'))

('العراب' ، العلامة العشرية ('9.90000'))

("المنتقمون: نهاية اللعبة" ، عشري ("9.75000"))

('الشمس المشرقة للعقل النظيف' ، عشري ('8.90000'))

("وحوش بلا أمة" ، العدد العشري ("8.70000"))

يمكنك العثور على اسم المراجع الحاصل على أكثر التقييمات مثل هذا:

select_movies_query = "" "SELECT CONCAT (الاسم_الأول ،" "، الاسم_الأخير) ، COUNT (*) كأعداد من المراجعين INNER JOIN التقييمات على المراجعين.id = rating.reviewer_id GROUP BY reviewer_id ORDER BY numC LIMIT 1" "" مع الاتصال. cursor () كمؤشر: cursor.execute (select_movies_query) للفيلم في cursor.fetchall (): print (movie) ('Mary Cooper'، 4)

كما ترى ، كتبت ماري كوبر معظم المراجعات.

تظل عملية تنفيذ الاستعلام كما هي: نقوم بتمرير الاستعلام للحصول على النتائج باستخدام. cursor.execute () .fetchall ()

تحديث وحذف السجلات من قاعدة البيانات

في هذا القسم ، سنقوم بتحديث وإزالة بعض الإدخالات. سنختار الأسطر المطلوبة باستخدام كلمة أساسية. أين

أمر التحديث

تخيل أن المراجعة إيمي فرح فاولر متزوجة من شيلدون كوبر. لقد غيرت اسم عائلتها إلى Cooper ونحتاج إلى تحديث قاعدة البيانات. لتحديث السجلات في MySQL ، استخدم عامل التشغيل: UPDATE

update_query = "" "UPDATE المراجعين SET last_name =" Cooper "WHERE first_name =" Amy "" "" مع connection.cursor () كمؤشر: cursor.execute (update_query) connection.commit ()

يقوم الرمز بتمرير طلب التحديث إلى الجدول وإجراء التغييرات اللازمة عليه. cursor.execute () .commit () المراجعين

لنفترض أننا نريد السماح للمراجعين بتغيير التقديرات. البرنامج يحتاج إلى معرفة والجديد. مثال على SQL: movie_id reviewer_id rating

UPDATE التقييمات SET rating = 5.0 حيث movie_id = 18 AND reviewer_id = 15 ؛ حدد * من التقييمات حيث movie_id = 18 AND reviewer_id = 15 ؛ تقوم الاستعلامات المحددة أولاً بتحديث التصنيف ثم إخراج الاستعلامات المحدثة. دعنا نكتب نصًا برمجيًا من Python يسمح لنا بضبط الدرجات: edit_ratings.py من getpass import getpass من mysql.connector import connect ، خطأ movie_id = input ("Enter movie id:") reviewer_id = input ("أدخل معرف المراجع:" ) new_rating = input ("أدخل تقييمًا جديدًا:") update_query = "" "UPDATE التقييمات SET rating ="٪ s "WHERE movie_id ="٪ s "AND reviewer_id ="٪ s "؛ حدد * من التصنيفات حيث movie_id ="٪ s "AND reviewer_id ="٪ s "" ""٪ (new_rating، movie_id، reviewer_id، movie_id، reviewer_id،) جرب: مع connect (host = "localhost"، user = input ("أدخل اسم المستخدم:")، password = getpass ("أدخل كلمة المرور:") ، قاعدة البيانات = "online_movie_rating" ،) كاتصال: مع connection.cursor () كمؤشر: للنتيجة في cursor.execute (update_query، multi = True): if result.with_rows: print (نتيجة. fetchall ()) connection.commit () باستثناء خطأ مثل e: print (e)

OUTPUT

أدخل معرف الفيلم: 18

أدخل معرف المراجع: 15

أدخل تصنيفًا جديدًا: 5

أدخل اسم المستخدم: الجذر

أدخل كلمة المرور: ········

[(18 ، 15 ، عشري ('5.0'))]

لتمرير طلبات متعددة إلى نفس المؤشر ، نقوم بتعيين قيمة للوسيطة. في هذه الحالة ، تقوم بإرجاع مكرر. يتوافق كل عنصر في المكرر مع كائن المؤشر الذي ينفذ التعليمات التي تم تمريرها في الطلب. يبدأ الكود أعلاه حلقة على هذا المكرر ، يستدعي كل كائن مؤشر. متعدد صحيح cursor.execute () for .fetchall ()

إذا لم يتم الحصول على مجموعة نتائج للعملية ، فسيتم طرح استثناء. لتجنب هذا الخطأ ، في الكود أعلاه ، نستخدم خاصية تشير إلى ما إذا كانت العملية الأخيرة التي تم تنفيذها قد أنشأت صفوفًا أم لا. .fetchall () cursor.with_rows

بينما يقوم هذا الرمز بالمهمة ، فإن التعليمات ، كما هي ، هدف مغر للمتسللين. إنه عرضة لهجوم حقن SQL الذي قد يسمح للمهاجمين بإفساد قاعدة البيانات أو إساءة استخدامها. أين

على سبيل المثال ، إذا أرسل المستخدم ، وكمدخلات ، فستبدو النتيجة على النحو التالي: movie_id = 18 reviewer_id = 15 تقييمًا = 5.0

بيثون $ edit_ratings.py

أدخل معرف الفيلم: 18

أدخل معرف المراجع: 15

أدخل تصنيفًا جديدًا: 5.0

ادخل اسم المستخدم:

أدخل كلمة المرور:

[(18 ، 15 ، عشري ('5.0'))]

النتيجة وتغيرت أيضا. ولكن إذا كنت مخترقًا ، فيمكنك إرسال أمر مخفي إلى الإدخال: movie_id = 18 reviewer_id = 15 5.0

بيثون $ edit_ratings.py

أدخل معرف الفيلم: 18

أدخل معرف المراجع: 15 ″ ؛ UPDATE المراجعين SET last_name = "أ

أدخل تصنيفًا جديدًا: 5.0

ادخل اسم المستخدم:

أدخل كلمة المرور:

[(18 ، 15 ، عشري ('5.0'))]

مرة أخرى ، يوضح الناتج أنه تم تغيير التصنيف المبلغ عنه إلى 5.0. ما الذي تغير؟

اعترض المخترق طلب تحديث البيانات. سيؤدي طلب التحديث إلى تغيير جميع السجلات في جدول المراجع: اسم_الأخير "أ"

>>> select_query = "" "

... حدد الاسم الأول ، اسم_الأخير

... من المراجعين

... "" "

>>> مع connect.cursor () كمؤشر:

... cursor.execute (select_query)

... للمراجع في cursor.fetchall ():

... طباعة (مراجع)

...

("شيتانيا" ، "أ")

("مريم" ، "أ")

("جون" ، "أ")

("توماس" ، "أ")

("بيني" ، "أ")

("ميتشل" ، "أ")

("وايت" ، "أ")

("أندريه"، "أ")

("شيلدون" ، "أ")

("Kimbra"، "A")

("كات" ، "أ")

("بروس" ، "أ")

("دومينغو" ، "أ")

("راجيش" ، "أ")

("بن")

("ماهيندر" ، "أ")

("أكبر" ، "أ")

("هوارد" ، "أ")

("Pinkie"، "A")

("جوركاران"، "أ")

("ايمي")

("مارلون" ، "أ")

يظهر الرمز أعلاه ولكل السجلات في جدول المراجعين. تسبب هجوم حقن SQL في إتلاف هذا الجدول ، وتغيير جميع السجلات إلى "A". first_name last_name last_name

هناك حل سريع لمنع مثل هذه الهجمات. لا تقم بإضافة قيم الاستعلام التي يوفرها المستخدم مباشرة إلى سلسلة الاستعلام. من الأفضل تحديث البرنامج النصي بإرسال قيم الطلب كوسيطات إلى .execute ()

edit_ratings.py من getpass import getpass من mysql.connector import connect ، خطأ movie_id = input ("أدخل معرف الفيلم:") reviewer_id = input ("أدخل معرف المراجع:") new_rating = input ("أدخل تقييمًا جديدًا:") update_query = "" UPDATE التقييمات SET rating =٪ s WHERE movie_id =٪ s AND reviewer_id =٪ s؛ حدد * من التقييمات حيث movie_id =٪ s AND reviewer_id =٪ s "" "val_tuple = (new_rating، movie_id، reviewer_id، movie_id، reviewer_id ،) جرب: باستخدام connect (host = "localhost" ، المستخدم = المدخلات ("أدخل اسم المستخدم:") ، كلمة المرور = getpass ("أدخل كلمة المرور:") ، قاعدة البيانات = "online_movie_rating" ،) كاتصال: مع connection.cursor ( ) كمؤشر: للنتيجة في cursor.execute (update_query، val_tuple، multi = True): if result.with_rows: print (result.fetchall ()) connection.commit () باستثناء الخطأ مثل e: print (e)

لاحظ أن العناصر النائبة لم تعد محاطة بعلامات اقتباس على شكل سلسلة. يتحقق من أن القيم الموجودة في المجموعة المعطاة كوسيطة هي من نوع البيانات المطلوب. إذا حاول المستخدم إدخال بعض الأحرف التي بها مشكلات ، فسيقوم الرمز بطرح استثناء:٪ s cursor.execute ()

OUTPUT

بيثون $ edit_ratings.py

أدخل معرف الفيلم: 18

أدخل معرف المراجع: 15 ″ ؛ UPDATE المراجعين SET last_name = "أ

أدخل تصنيفًا جديدًا: 5.0

ادخل اسم المستخدم:

أدخل كلمة المرور:

1292 (22007): قيمة مزدوجة غير صحيحة مبتورة: '15 ”؛

يجب استخدام هذا الأسلوب دائمًا عند تضمين إدخال المستخدم في الطلب. خذ الوقت الكافي للتعرف على طرق أخرى لمنع هجمات حقن SQL.

حذف السجلات: الأمر DELETE

إجراء حذف السجلات مشابه جدًا لتحديثها. نظرًا لأن هذه عملية لا رجوع فيها ، نوصي بتشغيل الاستعلام أولاً باستخدام نفس عامل التصفية للتأكد من أنك تحذف السجلات التي تريدها. على سبيل المثال ، لإزالة جميع تقييمات الأفلام والبيانات ، يمكننا أولاً تشغيل الاستعلام المناسب: DELETE SELECT reviewer_id = 7 SELECT

select_movies_query = "" "SELECT reviewer_id، movie_id من التقييم حيث review_id = 7" "" مع connection.cursor () كمؤشر: cursor.execute (select_movies_query) للفيلم في cursor.fetchall (): طباعة (فيلم)

OUTPUT

(2، 7)

(2، 8)

(2، 12)

(2، 23)

يعرض مقتطف الشفرة أعلاه زوجًا ، وللإدخالات في تقديرات الجدول ، والتي. بعد التأكد من أن هذه هي السجلات المراد حذفها ، فلننفذ الاستعلام بنفس الفلتر: reviewer_id movie_id reviewer_id = 2 DELETE

delete_query = "حذف من التصنيفات حيث reviewer_id = 2" مع connection.cursor () كمؤشر: cursor.execute (delete_query) connection.commit ()

طرق أخرى لربط Python و MySQL

في هذا البرنامج التعليمي ، قدمنا ​​MySQL Connector / Python ، وهي الوسيلة الموصى بها رسميًا للتفاعل مع قاعدة بيانات MySQL من تطبيق Python. فيما يلي بعض الموصلات الشائعة الأخرى:

  • mysqlclient هي مكتبة منافسة للموصل الرسمي ويتم استكمالها بنشاط بوظائف جديدة. نظرًا لأن جوهر المكتبة مكتوب بلغة C ، فإنها تتمتع بأداء أفضل من موصل Python الصافي الرسمي. العيب الكبير هو أن mysqlclient يصعب إعداده وتثبيته ، خاصة على Windows.

  • MySQLdb هو برنامج قديم لا يزال يستخدم في التطبيقات التجارية حتى اليوم. مكتوب بلغة C وأسرع MySQL Connector / Python ، ولكنه متاح فقط في Python 2.

تعمل برامج التشغيل هذه كواجهات بين برنامجك وقاعدة بيانات MySQL. في الواقع ، ما عليك سوى إرسال استعلامات SQL من خلالها. ومع ذلك ، يفضل العديد من المطورين استخدام النموذج الموجه للكائنات لإدارة البيانات ، وليس استعلامات SQL.

رسم الخرائط العلائقية للكائن (ORM) هو عملية لا تسمح فقط بالاستعلام ولكن أيضًا بمعالجة البيانات من قاعدة البيانات مباشرة باستخدام OPs. تقوم مكتبة ORM بتغليف الكود المطلوب لمعالجة البيانات ، وتحرير المطورين من الحاجة إلى استخدام استعلامات SQL. فيما يلي مكتبات ORM الأكثر شيوعًا للجمع بين Python و SQL:

  • SQLAlchemy هي عبارة عن ORM تبسط الاتصال بين Python وقواعد بيانات SQL الأخرى. يمكنك إنشاء محركات مختلفة لقواعد بيانات مختلفة مثل MySQL و PostgreSQL و SQLite وما إلى ذلك.

  • peewee هي مكتبة ORM خفيفة الوزن وسريعة مع تكوين بسيط ، وهو أمر مفيد للغاية عندما يقتصر تفاعلك مع قاعدة البيانات على جلب بعض السجلات. إذا كنت بحاجة إلى نسخ السجلات الفردية من قاعدة بيانات MySQL إلى ملف CSV ، فإن peewee هو الخيار الأفضل.

  • يعد Django ORM أحد أقوى أجزاء إطار عمل ويب Django ، مما يتيح لك التفاعل بسهولة مع مجموعة متنوعة من قواعد بيانات SQLite و PostgreSQL و MySQL. تستخدم العديد من التطبيقات المستندة إلى Django أداة Django ORM لنمذجة البيانات والاستعلامات الأساسية ، ومع ذلك ، بالنسبة للمهام الأكثر تعقيدًا ، يستخدم المطورون عادةً SQLAlchemy.

وفي الختام

في هذا البرنامج التعليمي ، ألقينا نظرة على كيفية دمج قاعدة بيانات MySQL في تطبيق Python الخاص بك. قمنا أيضًا بتطوير عينة اختبار من قاعدة بيانات MySQL وتفاعلنا معها مباشرةً من كود Python. لدى Python موصلات لنظم إدارة قواعد البيانات الأخرى مثل MongoDB و PostgreSQL. سنكون سعداء بمعرفة المواد الأخرى الموجودة في Python وقواعد البيانات التي قد تكون مهتمًا بها.

الوسائط الموضحة في هذه المقالة ليست مملوكة لشركة Analytics Vidhya ويتم استخدامها وفقًا لتقدير المؤلف.

أفلاطون. Web3 مُعاد تصوره. تضخيم ذكاء البيانات.
انقر هنا للوصول.

المصدر: https://www.analyticsvidhya.com/blog/2021/08/python-and-mysql-a-practical-introduction-for-data-analysis/

بقعة_صورة

أحدث المعلومات الاستخباراتية

بقعة_صورة