项目开始前的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": "*****",
# }
# }
# }