Lỗi này đã ám ảnh tôi trong một thời gian dài, vì vậy tôi quyết định đào sâu hơn và cố gắng giải quyết nó một lần và mãi mãi.
Nguyên nhân gốc:Sự cố SAVEPOINT là một lỗi chỉ xảy ra trong MySQL-Python
trình kết nối.
Khắc phục:Sử dụng các trình điều khiển MySQL khác cho Python (ví dụ:mysqlclient
).
Chi tiết / Kết quả:
- Đã thử các tệp nhị phân MySQL trong Homebrew, MAMP và XAMPP dành cho Mac.
- Đã thử các phiên bản MySQL khác nhau, 5.6 (
libmysqlclient.18.dylib
) và 5,7 (libmysqlclient.20.dylib
). - Đã thử các trình điều khiển MySQL của Python khác nhau.
Không tìm thấy mối quan hệ nào bằng cách thay đổi các phiên bản / nhị phân MySQL. Nhưng tôi đã thu hẹp vấn đề bằng cách thử nghiệm các trình điều khiển MySQL khác nhau thường được sử dụng trong Python:
-
MySQLdb (được sử dụng rộng rãi nhưng trình kết nối cơ sở dữ liệu cũ, lần cam kết gần đây nhất là 7 năm trước!):
$ pip install MySQL-python
-
mysqlclient (phiên bản hiện đại của
MySQL-python
, nhưng có rất nhiều bản sửa lỗi và cải tiến):$ pip install mysqlclient
-
PyMySQL (trình điều khiển cơ sở dữ liệu Python MySQL thuần túy):
$ pip install PyMySQL
Sau đó, thêm vào
settings.py
(ngay bên dướiimport os
):try: import pymysql pymysql.install_as_MySQLdb() except: pass
-
MySQL-Connector-Python bởi Oracle (trình điều khiển cơ sở dữ liệu Python MySQL thuần túy):
$ pip install mysql-connector-python-rf
Sau đó, chỉnh sửa
ENGINE
của cơ sở dữ liệu cấu hình trongsettings.py
:'ENGINE': 'mysql.connector.django',
Sự cố SAVEPOINT chỉ xảy ra khi sử dụng MySQL-python trình kết nối (trình điều khiển # 1), nhưng không có trong các trình kết nối khác (trình điều khiển # 2, # 3, # 4). Trong trường hợp của tôi, tôi đã chọn mysqlclient . Sự cố hiện đã không còn nữa.