Menghubungkan ke database MySQL dengan Python bisa membingungkan. Ada beberapa driver koneksi yang berbeda, dan tidak semuanya bekerja dengan baik dengan sistem operasi yang berbeda. Selain itu, mengaktifkan SSL bisa menjadi suatu tantangan
Artikel ini mencakup empat metode yang dapat Anda gunakan untuk menghubungkan aplikasi Python Anda ke MySQL. Contoh ini akan menggunakan PlanetScale, platform database tanpa server untuk MySQL, tetapi database sebenarnya yang Anda sambungkan bersifat arbitrer
Metode koneksi berikut akan dibahas
- sudo apt-get install python3-dev default-libmysqlclient-dev build-essential0
- sudo apt-get install python3-dev default-libmysqlclient-dev build-essential_1
- sudo apt-get install python3-dev default-libmysqlclient-dev build-essential_2
- sudo apt-get install python3-dev default-libmysqlclient-dev build-essential_3
Jika Anda memerlukan database gratis untuk menguji koneksi Anda, PlanetScale adalah pilihan yang sangat baik. PlanetScale dibangun di atas Vitess dan memberi Anda alur kerja percabangan yang familier untuk menguji dan menerapkan perubahan skema
Vitess dibuat pada tahun 2010 untuk mengatasi masalah penskalaan di YouTube. Sejak itu, proyek open source terus berkembang dan sekarang membantu beberapa perusahaan seperti Slack dan Square menangani kebutuhan penskalaan data mereka yang sangat besar.
Mendaftar akun untuk mendapatkan database 5GB gratis
Buat basis data
Setelah Anda berada di dasbor PlanetScale
- Klik "Buat database baru" di dasbor ikhtisar organisasi Anda
- Beri nama basis data Anda
- Pilih wilayah dari dropdown
- Klik Buat basis data
Basis data Anda akan dibuat dengan cabang pengembangan sudo apt-get install python3-dev default-libmysqlclient-dev build-essential4. Anda dapat membuat perubahan skema di sini dan mempromosikannya ke produksi setelah Anda siap
Dapatkan kredensial koneksi
Untuk menghasilkan kredensial koneksi
- Klik "Hubungkan" pada halaman ikhtisar basis data Anda
- Pilih "Python" dari dropdown "Connect With".
- Salin kredensial ke file sudo apt-get install python3-dev default-libmysqlclient-dev build-essential_5 di folder aplikasi Python Anda
Untuk memastikan koneksi yang aman, PlanetScale menggunakan sertifikat dari Otoritas Sertifikat (CA) yang merupakan bagian dari root sistem yang tersedia di hampir semua platform. Anda harus menentukan jalur ke sertifikat CA yang Anda percayai saat menghubungkan ke database. Perhatikan bahwa jalur ini bergantung pada platform Anda. di berbagai sistem operasi dan distribusi
Jika Anda menyalin kredensial dari dasbor PlanetScale, ini seharusnya sudah dilakukan untuk Anda, karena PlanetScale mendeteksi sistem operasi Anda secara otomatis
Jika Anda menggunakan sistem Windows, Anda perlu mengunduh sertifikat root, lalu arahkan ke lokasinya dengan opsi konfigurasi yang benar untuk driver yang Anda gunakan
Paket sudo apt-get install python3-dev default-libmysqlclient-dev build-essential0 adalah salah satu paket Python paling populer untuk MySQL. Ini berisi modul sudo apt-get install python3-dev default-libmysqlclient-dev build-essential_7, antarmuka ke MySQL yang menyediakan API database Python
Mulailah dengan menginstal sudo apt-get install python3-dev default-libmysqlclient-dev build-essential0. Anda dapat melakukannya dengan dua cara
- Gunakan penginstal dari situs resmi MySQL yang sesuai dengan OS dan versi SQL yang Anda jalankan
- Gunakan sudo apt-get install python3-dev default-libmysqlclient-dev build-essential_9 untuk menginstalnya
Terminal
pip install mysqlclientDi Linux, Anda mungkin perlu memasang header dan pustaka pengembangan Python3 dan MySQL sebelum memasang sudo apt-get install python3-dev default-libmysqlclient-dev build-essential0
Terminal
sudo apt-get install python3-dev default-libmysqlclient-dev build-essentialSetelah sudo apt-get install python3-dev default-libmysqlclient-dev build-essential0 diinstal, Anda dapat terhubung ke database menggunakan kode berikut
Piton
import os import MySQLdb # import the MySQLdb module from dotenv import load_dotenv load_dotenv() # Create the connection object connection = MySQLdb.connect( host=os.getenv("HOST"), user=os.getenv("USERNAME"), passwd=os.getenv("PASSWORD"), db=os.getenv("DATABASE"), ssl_mode="VERIFY_IDENTITY", ssl={ 'ca': os.getenv("SSL_CERT") } ) # Create cursor and use it to execute SQL command cursor = connection.cursor() cursor.execute("select @@version") version = cursor.fetchone() if version: print('Running version: ', version) else: print('Not connected.')Catatan, Anda harus menginstal import os import MySQLdb # import the MySQLdb module from dotenv import load_dotenv load_dotenv() # Create the connection object connection = MySQLdb.connect( host=os.getenv("HOST"), user=os.getenv("USERNAME"), passwd=os.getenv("PASSWORD"), db=os.getenv("DATABASE"), ssl_mode="VERIFY_IDENTITY", ssl={ 'ca': os.getenv("SSL_CERT") } ) # Create cursor and use it to execute SQL command cursor = connection.cursor() cursor.execute("select @@version") version = cursor.fetchone() if version: print('Running version: ', version) else: print('Not connected.')_2 dan mengimpor modul import os import MySQLdb # import the MySQLdb module from dotenv import load_dotenv load_dotenv() # Create the connection object connection = MySQLdb.connect( host=os.getenv("HOST"), user=os.getenv("USERNAME"), passwd=os.getenv("PASSWORD"), db=os.getenv("DATABASE"), ssl_mode="VERIFY_IDENTITY", ssl={ 'ca': os.getenv("SSL_CERT") } ) # Create cursor and use it to execute SQL command cursor = connection.cursor() cursor.execute("select @@version") version = cursor.fetchone() if version: print('Running version: ', version) else: print('Not connected.')3 untuk mengakses kredensial database di file sudo apt-get install python3-dev default-libmysqlclient-dev build-essential5
Catatan untuk pengguna Windows. Instalasi sudo apt-get install python3-dev default-libmysqlclient-dev build-essential0 dari wheel file tidak mendukung import os import MySQLdb # import the MySQLdb module from dotenv import load_dotenv load_dotenv() # Create the connection object connection = MySQLdb.connect( host=os.getenv("HOST"), user=os.getenv("USERNAME"), passwd=os.getenv("PASSWORD"), db=os.getenv("DATABASE"), ssl_mode="VERIFY_IDENTITY", ssl={ 'ca': os.getenv("SSL_CERT") } ) # Create cursor and use it to execute SQL command cursor = connection.cursor() cursor.execute("select @@version") version = cursor.fetchone() if version: print('Running version: ', version) else: print('Not connected.')6. Karena Anda ingin memastikan koneksi database aman, sebaiknya gunakan driver lain, seperti mysql-connector-python
Contoh ini menggunakan koneksi untuk mengambil versi SQL database lalu menutup koneksi
Metode koneksi lainnya memiliki sintaks yang hampir sama dengan contoh ini. Sintaks serupa ini berasal dari spesifikasi API basis data Python (PEP 249) yang mendorong konsistensi di antara modul Python yang digunakan untuk mengakses basis data
Modul MySQL Connector/Python adalah driver resmi yang didukung Oracle untuk menghubungkan MySQL melalui Python. Konektor sepenuhnya Python, sedangkan sudo apt-get install python3-dev default-libmysqlclient-dev build-essential0 ditulis dalam C. Itu juga mandiri, artinya tidak memerlukan pustaka klien MySQL atau modul Python apa pun di luar pustaka standar
Perhatikan bahwa Konektor MySQL/Python tidak mendukung metode otentikasi server MySQL lama, yang berarti versi MySQL sebelum 4. 1 tidak bekerja
Mulailah dengan memasang modul sudo apt-get install python3-dev default-libmysqlclient-dev build-essential_1. Disarankan untuk menginstalnya menggunakan pip
Terminal
pip install mysql-connector-pythonSetelah diinstal, gunakan kode berikut untuk terhubung ke MySQL
Piton
import os from dotenv import load_dotenv from mysql.connector import Error import mysql.connector load_dotenv() connection = mysql.connector.connect( host=os.getenv("HOST"), database=os.getenv("DATABASE"), user=os.getenv("USERNAME"), password=os.getenv("PASSWORD"), ssl_ca=os.getenv("SSL_CERT") ) try: if connection.is_connected(): cursor = connection.cursor() cursor.execute("select @@version ") version = cursor.fetchone() if version: print('Running version: ', version) else: print('Not connected.') except Error as e: print("Error while connecting to MySQL", e) finally: connection.close()Paket PyMySQL adalah konektor lain yang dapat Anda gunakan untuk menghubungkan Python ke MySQL. Ini pilihan yang bagus jika Anda mencari kecepatan, karena lebih cepat dari sudo apt-get install python3-dev default-libmysqlclient-dev build-essential1
Anda dapat menginstalnya menggunakan pip dengan
Terminal
pip install PyMySQLKemudian, gunakan kode koneksi berikut
Piton
from dotenv import load_dotenv import pymysql import os load_dotenv() connection = pymysql.connect( host=os.getenv("HOST"), database=os.getenv("DATABASE"), user=os.getenv("USERNAME"), password=os.getenv("PASSWORD"), ssl_ca=os.getenv("SSL_CERT") ) cursor = connection.cursor() cursor.execute("select @@version ") version = cursor.fetchone() if version: print('Running version: ', version) else: print('Not connected.') connection.close()Pustaka sudo apt-get install python3-dev default-libmysqlclient-dev build-essential3 digunakan untuk mengakses database MySQL dari kerangka kerja asyncio. Selain asinkron, kode koneksi mirip dengan PyMySQL. Perhatikan bahwa menggunakan sudo apt-get install python3-dev default-libmysqlclient-dev build-essential_3 membutuhkan Python 3. 7+ dan PyMySQL
Untuk menggunakan sudo apt-get install python3-dev default-libmysqlclient-dev build-essential_3, instal modul asinkron terlebih dahulu dengan
Terminal
pip install asyncioKemudian, instal sudo apt-get install python3-dev default-libmysqlclient-dev build-essential3 menggunakan
Terminal
pip install aiomysqlAnda kemudian dapat terhubung ke MySQL menggunakan kode berikut
Piton
import os import asyncio import aiomysql import ssl from dotenv import load_dotenv load_dotenv() ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) ctx.load_verify_locations(cafile=os.getenv("SSL_CERT")) loop = asyncio.get_event_loop() async def connect_db(): connection = await aiomysql.connect( host=os.getenv("HOST"), port=3306, user=os.getenv("USERNAME"), password=os.getenv("PASSWORD"), db=os.getenv("DATABASE"), loop=loop, ssl=ctx ) cursor = await connection.cursor() await cursor.execute("select @@version") version = await cursor.fetchall() print('Running version: ', version) await cursor.close() connection.close() loop.run_until_complete(connect_db())Data yang bertahan dalam database adalah salah satu fitur umum dari aplikasi perangkat lunak. Seperti Python, sebagian besar bahasa pemrograman mendukung koneksi dan interaksi dengan database yang berbeda
Tutorial ini mengeksplorasi menghubungkan Python ke MySQL. Kami membagikan empat konektor umum berbeda yang dapat Anda gunakan dan mengujinya di database PlanetScale menggunakan SSL untuk keamanan — langkah penting, karena mencegah serangan man-in-the-middle. Kami meninjau cara kerja konektor untuk setiap metode koneksi dan menunjukkan kepada Anda kode yang diperlukan untuk menjalankannya. Sekarang setelah Anda mengerjakan ikhtisar langsung ini, Anda siap untuk menghubungkan database MySQL ke aplikasi Python