it-swarm.com.ru

как я могу проверить подключение базы данных к MySQL в Django

как мне это сделать?

Я думал, я могу что-то прочитать из базы данных, но это выглядит слишком много, есть что-то вроде? 

settings.DATABASES['default'].check_connection()
11
doniyor

Все, что вам нужно сделать, это запустить приложение, и если оно не подключено, оно не будет работать. Другой способ, которым вы можете попробовать - это на Shell, попробуйте следующее -

from Django.db import connections
from Django.db.utils import OperationalError
db_conn = connections['default']
try:
    c = db_conn.cursor()
except OperationalError:
    connected = False
else:
    connected = True
19
Mutant

Я использую следующую команду управления Django под названием wait_for_db:

import time

from Django.db import connection
from Django.db.utils import OperationalError
from Django.core.management.base import BaseCommand


class Command(BaseCommand):
    """Django command that waits for database to be available"""

    def handle(self, *args, **options):
        """Handle the command"""
        self.stdout.write('Waiting for database...')
        db_conn = None
        while not db_conn:
            try:
                connection.ensure_connection()
                db_conn = True
            except OperationalError:
                self.stdout.write('Database unavailable, waiting 1 second...')
                time.sleep(1)

        self.stdout.write(self.style.SUCCESS('Database available!'))
1
LondonAppDev

У меня был более сложный случай, когда я использую mongodb за модулем djongo и RDS mysql. Так что это не только несколько баз данных, но и djongo выдает ошибку SQLDecode. Я также должен был выполнить и получить, чтобы это работало:

from Django.conf import settings

if settings.DEBUG:
    # Quick database check here
    from Django.db import connections
    from Django.db.utils import OperationalError
    dbs = settings.DATABASES.keys()
    for db in dbs:
        db_conn = connections[db]  # i.e. default
        try:
            c = db_conn.cursor()
            c.execute("""SELECT "non_existent_table"."id" FROM "non_existent_table" LIMIT 1""")
            c.fetchone()
            print("Database '{}' connection ok.".format(db))  # This case is for djongo decoding sql ok
        except OperationalError as e:
            if 'no such table' in str(e):
                print("Database '{}' connection ok.".format(db))  # This is ok, db is present
            else:
                raise  # Another type of op error
        except Exception:  # djongo sql decode error
            print("ERROR: Database {} looks to be down.".format(db))
            raise

Я загружаю это в свое приложение __init__.py, так как хочу, чтобы оно запускалось при запуске только один раз и только если включена функция DEBUG. Надеюсь, поможет!

0
radtek