项目开始前的db准备

检查是否存在数据库,如果无则创建
在创建新用户前检查该用户是否已存在。
如果存在,直接为该用户赋予新数据库的权限;
否则,创建新用户并赋予权限

centos7 python>=3.9会安装不上mysqlclient,这时候使用
pip install pymysql
settings.py

import pymysql
# Override default MySQLdb with pymysql
pymysql.install_as_MySQLdb()
import pymysql


from 目录.settings import NAME, USER, PWD, CONFIG
"""
CONFIG = {'host': 'localhost', 'port': 3306,
          'user': "root", 'password': "*****", }
"""

class CreateDb():
    config = CONFIG
    database_name = NAME
    charset = 'utf8mb4'
    collation = 'utf8mb4_unicode_ci'

    def __init__(self, USER, PWD):
        # 新用户信息
        self.new_username = USER
        self.new_user_password = PWD
        # 连接到MySQL服务器
        self.connection = pymysql.connect(**self.config)
        self.cursor = self.connection.cursor()

    def createdb(self):
        query = f"SHOW DATABASES LIKE '{self.database_name}'"
        self.cursor.execute(query)
        result = self.cursor.fetchone()

        if not result:
            print(
                f"*1.1 Database {self.database_name} does not exist. Creating it now...")
            create_query = f"CREATE DATABASE {self.database_name} CHARACTER SET {self.charset} COLLATE {self.collation}"
            self.cursor.execute(create_query)
            print(f"*1.2 Database {self.database_name} created successfully.")
        else:
            print(f"!1.x Database {self.database_name} already exists.")

    def check_user(self):
        check_user_query = f"SELECT EXISTS(SELECT 1 FROM mysql.user WHERE User = '{self.new_username}') AS user_exists"
        self.cursor.execute(check_user_query)
        result = self.cursor.fetchone()
        # print()
        user_exists = result[0]

        if user_exists:
            print(f"!2 User {self.new_username} already exists.")
        else:
            create_user_query = f"CREATE USER '{self.new_username}'@'%' IDENTIFIED BY '{self.new_user_password}'"
            print(create_user_query)
            self.cursor.execute(create_user_query)
            print(f"*2 User {self.new_username} created successfully.")

    def grant_privileges(self):
        grant_privileges_query = f"GRANT ALL PRIVILEGES ON `{self.database_name}`.* TO '{self.new_username}'@'%'"
        self.cursor.execute(grant_privileges_query)
        print(
            f"*3 Granted all privileges on database {self.database_name} to user {self.new_username}.")

    def flush_privileges(self):
        # 4.0 刷新权限以使新设置立即生效
        flush_privileges_query = "FLUSH PRIVILEGES"
        self.cursor.execute(flush_privileges_query)
        print("*4 Privileges flushed successfully.")

    @property
    def excute(self):
        self.createdb()
        self.check_user()
        self.grant_privileges()
        self.flush_privileges()


creatrdb = CreateDb(USER, PWD)
creatrdb.excute


# 运行Django迁移(假设settings.py配置正确)
# import os
# os.system('python manage.py makemigrations')
# os.system('python manage.py migrate')


# DATABASES = {
#     'default': {
#         'ENGINE': 'django.db.backends.mysql',
#         'NAME': 'drfdb',
#         'USER':'root',
#         'PASSWORD':'*****',
#         'HOST':'127.0.0.1',
#         'PORT':'3306',
#     },
#     'OPTIONS': {
#         'client_library': 'pymysql',
#     },
# }
# """add"""
# AUTH_USER_MODEL = 'app01.User'


# NAME = "drfdbtest4"
# USER = "drfdbtest2"
# PWD = "drfdbtest2"
# DATABASES = {
#     'default': {
#         'ENGINE': 'django.db.backends.mysql',
#         'NAME': 'NAME',  # 数据库名字
#         'USER': NAME,  # luffy用户
#         'PASSWORD': PWD,
#         'HOST': 'localhost',
#         'PORT': 3306
#     }
# }
# CACHES = {
#     "default": {
#         "BACKEND": "django_redis.cache.RedisCache",
#         "LOCATION": "redis://127.0.0.1:6379",
#         "OPTIONS": {
#             "CLIENT_CLASS": "django_redis.client.DefaultClient",
#             "CONNECTION_POOL_KWARGS": {"max_connections": 100}
#             # "PASSWORD": "*****",
#         }
#     }
# }


posted @ 2024-04-17 18:44  沉岩  阅读(1)  评论(0编辑  收藏  举报