kamprasad
kamprasad

Reputation: 648

MySQL drive issue when Django app run on Azure Function

When running the Django app on Azure function, I get this error.

"ENGINE": "django.db.backends.mysql"
Result: Failure Exception: NameError: name '_mysql' is not defined

I'm assuming that I can't install the MySQL module on Azure function.

Upvotes: 0

Views: 86

Answers (2)

kamprasad
kamprasad

Reputation: 648

after adding mysql-connector-python packages and changed settings.py. Below exception throws from the code.

    System check identified no issues (0 silenced).
Exception in thread django-main-thread:
Traceback (most recent call last):
  File "/opt/homebrew/Cellar/[email protected]/3.11.6_1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/threading.py", line 1045, in _bootstrap_inner
    self.run()
  File "/opt/homebrew/Cellar/[email protected]/3.11.6_1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/threading.py", line 982, in run
    self._target(*self._args, **self._kwargs)
  File "/Users/manoj/Desktop/django/.venv/lib/python3.11/site-packages/django/utils/autoreload.py", line 64, in wrapper
    fn(*args, **kwargs)
  File "/Users/manoj/Desktop/django/.venv/lib/python3.11/site-packages/django/core/management/commands/runserver.py", line 136, in inner_run
    self.check_migrations()
  File "/Users/user/Desktop/django/.venv/lib/python3.11/site-packages/django/core/management/base.py", line 574, in check_migrations
    executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS])
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/user/Desktop/django/.venv/lib/python3.11/site-packages/django/db/migrations/executor.py", line 18, in __init__
    self.loader = MigrationLoader(self.connection)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/user/Desktop/django/.venv/lib/python3.11/site-packages/django/db/migrations/loader.py", line 58, in __init__
    self.build_graph()
  File "/Users/manoj/Desktop/django/.venv/lib/python3.11/site-packages/django/db/migrations/loader.py", line 235, in build_graph
    self.applied_migrations = recorder.applied_migrations()
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/user/Desktop/django/.venv/lib/python3.11/site-packages/django/db/migrations/recorder.py", line 81, in applied_migrations
    if self.has_table():
       ^^^^^^^^^^^^^^^^
  File "/Users/v/Desktop/django/.venv/lib/python3.11/site-packages/django/db/migrations/recorder.py", line 57, in has_table
    with self.connection.cursor() as cursor:
         ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/user/Desktop/django/.venv/lib/python3.11/site-packages/django/utils/asyncio.py", line 26, in inner
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/Users/user/Desktop/django/.venv/lib/python3.11/site-packages/django/db/backends/base/base.py", line 330, in cursor
    return self._cursor()
           ^^^^^^^^^^^^^^
  File "/Users/user/Desktop/django/.venv/lib/python3.11/site-packages/django/db/backends/base/base.py", line 306, in _cursor
    self.ensure_connection()
  File "/Users/user/Desktop/django/.venv/lib/python3.11/site-packages/django/utils/asyncio.py", line 26, in inner
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/Users/user/Desktop/django/.venv/lib/python3.11/site-packages/django/db/backends/base/base.py", line 289, in ensure_connection
    self.connect()
  File "/Users/user/Desktop/django/.venv/lib/python3.11/site-packages/django/utils/asyncio.py", line 26, in inner
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/Users/user/Desktop/django/.venv/lib/python3.11/site-packages/django/db/backends/base/base.py", line 270, in connect
    self.connection = self.get_new_connection(conn_params)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/user/Desktop/django/.venv/lib/python3.11/site-packages/mysql/connector/django/base.py", line 399, in get_new_connection
    cnx = mysql.connector.connect(**conn_params)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/user/Desktop/django/.venv/lib/python3.11/site-packages/mysql/connector/pooling.py", line 293, in connect
    return CMySQLConnection(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/user/Desktop/django/.venv/lib/python3.11/site-packages/mysql/connector/connection_cext.py", line 129, in __init__
    self.connect(**kwargs)
  File "/Users/user/Desktop/django/.venv/lib/python3.11/site-packages/mysql/connector/abstracts.py", line 1234, in connect
    self.config(**kwargs)
  File "/Users/user/Desktop/django/.venv/lib/python3.11/site-packages/mysql/connector/abstracts.py", line 527, in config
    self.raise_on_warnings = config["raise_on_warnings"]
    ^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/user/Desktop/django/.venv/lib/python3.11/site-packages/mysql/connector/abstracts.py", line 1059, in raise_on_warnings
    raise ValueError("Expected a boolean type")
ValueError: Expected a boolean type

Upvotes: 0

Mohamed Azarudeen Z
Mohamed Azarudeen Z

Reputation: 1327

To use the package i mentioned, you need to change the ENGINE setting in your DATABASES configuration in the Django settings.py file to 'mysql.connector.django'. below is the code

DATABASES = {
    'default': {
        'ENGINE': 'mysql.connector.django',
        'NAME': 'your_database_name',
        'USER': 'your_database_user',
        'PASSWORD': 'your_database_password',
        'HOST': 'your_database_host',
        'PORT': 'your_database_port',
    }
}

and also you need to install the mysql-connector-python package.

pip install mysql-connector-python

After changing these, Django will use the mysql-connector-python package as the database connector instead of mysqlclient.

Upvotes: 0

Related Questions