Jadi saya telah mencoba melakukan beberapa pembaruan basis data dengan python dan saat menyiapkan seluruh lingkungan pengembang, saya menemukan tiga hal ini yang membuat saya pusing.
Ada MySQLdb
Ada klien saya
- Dan kemudian ada python konektor mysql
Apa masing-masing, perbedaan dan di mana menggunakannya? Terima kasih
Jawaban:
MySQLdb adalah pembungkus python tipis di sekitar modul C yang mengimplementasikan API untuk database MySQL.
Ada versi pembungkus MySQLDb1 yang digunakan beberapa waktu lalu dan sekarang dianggap sebagai warisan. Ketika MySQLDb1 mulai berevolusi ke MySQLDb2 dengan perbaikan bug dan dukungan Python3, MySQLDb1 telah bercabang dan berikut adalah bagaimana mysqlclient muncul, dengan perbaikan bug dan dukungan Python3. Singkatnya, jadi sekarang kita memiliki MySQLDb2 yang belum siap untuk digunakan produksi, MySQLDb1 sebagai driver yang ketinggalan jaman dan komunitas mendukung mysqlclient dengan perbaikan bug dan dukungan Python3.
Sekarang, untuk mengatasi kekacauan itu, MySQL menyediakan versi adaptor MySQL mereka sendiri - konektor mysql , modul python all-in yang menggunakan MySQL API tanpa dependensi modul C dan hanya modul python standar yang digunakan.
Jadi sekarang pertanyaannya adalah: konektor mysqlclient vs mysql.
Sedangkan untuk saya, saya akan pergi dengan perpustakaan yang didukung secara resmi, namun
mysqlclient
harus menjadi pilihan yang baik juga. Keduanya sedang diperbarui secara aktif dengan perbaikan dan fitur baru yang dapat Anda lihat dengan melakukan aktif di hari-hari terakhir.Catatan: Saya tidak memiliki banyak pengalaman dengan mereka, jadi mungkin ada kasus ketika satu atau lainnya tidak sesuai dengan kebutuhan Anda. Kedua pustaka mengikuti standar PEP-249 yang berarti Anda akan baik-baik saja dengan setidaknya fungsionalitas dasar di mana-mana.
Instalasi dan Dependensi
Sebagai garpu pembungkus C, diperlukan modul C untuk bekerja dengan MySQL yang menambahkan file header python untuk membangun ekstensi ini (baca python-dev). Instalasi tergantung pada sistem yang Anda gunakan, pastikan Anda mengetahui nama paket dan dapat menginstalnya.
sumber
Ada adaptor MySQL untuk Python yang saat ini dipertahankan:
mysqlclient
- Sejauh ini konektor MySQL tercepat untuk CPython. Membutuhkanmysql-connector-c
perpustakaan C untuk bekerja.PyMySQL
- Klien Python MySQL murni. Menurut pengelola keduanyamysqlclient
danPyMySQL
, Anda harus menggunakanPyMySQL
jika:libmysqlclient
karena alasan tertentu.mysql-connector-python
- Konektor MySQL yang dikembangkan oleh grup MySQL di Oracle, juga seluruhnya ditulis dengan Python. Kinerjanya tampaknya yang terburuk dari ketiganya. Selain itu, karena beberapa masalah perizinan, Anda tidak dapat mengunduhnya dari PyPI (tetapi sekarang tersedia melalui conda).Tolak ukur
Menurut tolok ukur berikut,
mysqlclient
lebih cepat (terkadang> 10x lebih cepat) daripada klien Python murni.sumber
PyMySQL
masih cara yang harus ditempuh jika menggunakan PyPy.mysqlclient
adalah konektor default yang digunakan oleh sqlalchemy ketika URL database Anda dimulai denganmysql://...
. Untuk menggunakanPyMySQL
, mulai URL Anda denganmysql+pymysql://...
. Untuk menggunakanmysql-connector-python
, mulai URL Anda denganmysql+mysqlconnector://...
. Lihat dokumen sqlalchemy untuk info lebih lanjut.Tetap gunakan mysqlclient jika Anda ingin akses yang lebih cepat dan akses berulang
MySQL Connector/Python: 23.096168518066406 [sec] mysqlclient: 6.815327882766724 [sec] PyMySQL: 24.616853952407837 [sec] MySQL Connector/Python: 22.619106769561768 [sec] mysqlclient: 6.607790231704712 [sec] PyMySQL: 24.410773038864136 [sec]
Ulangi ... dari tolok ukur sebelumnya ...
def q100k(cur): t = time.time() for _ in range(100000): cur.execute("SELECT 1,2,3,4,5,6") res = cur.fetchall() assert len(res) == 1 assert res[0] == (1, 2, 3, 4, 5, 6) return time.time() - t
sumber