Bug ini menghantui saya untuk waktu yang lama, jadi saya memutuskan untuk menggali lebih jauh dan mencoba menyelesaikannya untuk selamanya.
Akar Penyebab:Masalah SAVEPOINT adalah bug yang hanya terjadi di MySQL-Python
konektor.
Perbaiki:Gunakan driver MySQL lain untuk Python (mis. mysqlclient
).
Detail/Temuan:
- Mencoba binari MySQL di Homebrew, MAMP, dan XAMPP untuk Mac.
- Mencoba berbagai versi MySQL, 5.6 (
libmysqlclient.18.dylib
) dan 5.7 (libmysqlclient.20.dylib
). - Mencoba berbagai driver MySQL Python.
Tidak ada hubungan yang ditemukan dengan memvariasikan binari/versi MySQL. Tapi saya telah mempersempit masalah dengan menguji berbagai driver MySQL yang biasa digunakan di Python:
-
MySQLdb (konektor basis data yang banyak digunakan tetapi lama, komit terakhir adalah 7 tahun yang lalu!):
$ pip install MySQL-python
-
klien mysql (versi modern
MySQL-python
, tetapi dengan banyak perbaikan bug dan peningkatan):$ pip install mysqlclient
-
PyMySQL (driver database Python MySQL murni):
$ pip install PyMySQL
Kemudian, tambahkan
settings.py
(tepat di bawahimport os
):try: import pymysql pymysql.install_as_MySQLdb() except: pass
-
MySQL-Connector-Python oleh Oracle (driver database MySQL murni Python):
$ pip install mysql-connector-python-rf
Kemudian, edit
ENGINE
database konfigurasi disettings.py
:'ENGINE': 'mysql.connector.django',
Masalah SAVEPOINT hanya terjadi saat menggunakan MySQL-python konektor (driver #1), tetapi tidak pada yang lain (driver #2, #3, #4). Dalam kasus saya, saya telah memilih mysqlclient . Masalah sudah hilang sekarang.