このメソッドは、GitHubのpymysqlのIsueesから取得されます
operations.py
from django.utils.encoding import force_text
def last_executed_query(self, cursor, sql, params):
# With MySQLdb, cursor objects have an (undocumented) "_executed"
# attribute where the exact query sent to the database is saved.
# See MySQLdb/cursors.py in the source distribution.
query = getattr(cursor, '_executed', None)
if query is not None:
if type(query) == bytes:
query = query.decode(errors='replace') # mysqlclient
elif type(query) == str:
query = query.encode(errors='replace') # PyMySQL
else:
query = force_text(query, errors='replace') # fallback compatibility ?
return query
init .py
from __future__ import print_function
import sys
...
version_info = (1, 3, 12, "final", 0)
...
def install_as_MySQLdb(MySQLdb_version=None):
"""
After this function is called, any application that imports MySQLdb or
_mysql will unwittingly actually use pymysql.
"""
if type(MySQLdb_version) == tuple and len(MySQLdb_version) == 5:
print("WARNING: Use at your own risk !!\nSet MySQLdb version = {}".format(MySQLdb_version))
global version_info
version_info = MySQLdb_version
sys.modules["MySQLdb"] = sys.modules["_mysql"] = sys.modules["pymysql"]
>>> import pymysql
>>> pymysql.install_as_MySQLdb(MySQLdb_version=(1, 4, 2, "final", 0))
WARNING: Use at your own risk !!
Set MySQLdb_version = (1, 4, 2, 'final', 0)
>>> pymysql.version_info
(1, 4, 2, 'final', 0)
>>>