[Aprendizaje de bases de datos]: Python implementa la generación e importación de archivos SQL de la base de datos MySQL

Tabla de contenido

1. Exportar datos mysql a un archivo SQL (si la base de datos existe)

2. Importe los datos del archivo SQL existente a la base de datos (el requisito previo es que la base de datos exista) 

 3. Utilice Navicat para exportar archivos SQL e importar archivos SQL.

1) Exportar archivo SQL desde la base de datos

2) Importar archivos SQL a la base de datos 


1. Exportar datos mysql a un archivo SQL (si la base de datos existe)

Principalmente es necesario modificar la información relevante de la base de datos, como el número de puerto, nombre de usuario, contraseña, etc.

La base de datos debe existir, de lo contrario se informará un error. 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2022/5/29 13:06
# @Author  : @linlianqin
# @Site    : 
# @File    : exportSqlFile.py
# @Software: PyCharm
# @description:导出数据库文件sql

import os

class InitSql(object):
	sql_file = "A.sql"

	def import_server_db(self):
		mysqldump_commad_dict = {'dumpcommad': 'mysqldump ', 'server': 'localhost', 'user': 'root',
		                         'password': 'root', 'port': 3306, 'db': 'studentmanagersystem'}
		# mysqldump 命令
		sqlfromat = "mysqldump --column-statistics=0 -h%s -u%s -p%s -P%s %s > %s"
		# 生成相应的sql语句
		sql = (sqlfromat % (mysqldump_commad_dict['server'],
		                    mysqldump_commad_dict['user'],
		                    mysqldump_commad_dict['password'],
		                    mysqldump_commad_dict['port'],
		                    mysqldump_commad_dict['db'],
		                    self.sql_file))
		print("执行的导出数据库的sql:" + sql)
		result = os.system(sql)
		return result


if __name__ == '__main__':
	initSql = InitSql()
	initSql.import_server_db()

El archivo sql generado es el siguiente:

-- Volcado de MySQL 10.13 Distrib 8.0.29, para Win64 (x86_64)
--
-- Anfitrión: localhost Base de datos: StudentManagerSystem
-------------------------------------------------- ------
-- Versión del servidor 8.0.29

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!50503 ESTABLECER NOMBRES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Estructura de tabla para la tabla `studenttable`
--

DROP TABLE SI EXISTE `studenttable`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET carácter_set_client = utf8mb4 */;
CREAR TABLA `tabla de estudiantes` (
  `número` varchar(255) CONJUNTO DE CARACTERES utf8mb4 COLLATE utf8mb4_0900_ai_ci NO NULO,
  `nombre` varchar(255) CONJUNTO DE CARACTERES utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
  `sex` varchar(255) CONJUNTO DE CARACTERES utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
  `clases` varchar(255) CONJUNTO DE CARACTERES utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
  `floor` varchar(255) CONJUNTO DE CARACTERES utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
  `room` varchar(255) CONJUNTO DE CARACTERES utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
  `tel` varchar(255) CONJUNTO DE CARACTERES utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
  `money` varchar(255) CONJUNTO DE CARACTERES utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
  CLAVE PRIMARIA (`número`) USANDO BTREE
) MOTOR=InnoDB CONJUNTO DE CARACTERES PREDETERMINADO=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC;
/*!40101 SET caracter_set_client = @saved_cs_client */;

--
-- Volviendo datos para la tabla `studenttable`
--

BLOQUEAR TABLAS `studenttable` ESCRIBIR;
/*!40000 ALTER TABLE `studenttable` DESHABILITAR TECLAS */;
INSERTAR EN VALORES `studenttable` ('2201','Classmate Liu','Male','Class 1','A1','101','1112','30'),('2202','Classmate Zhang ','Hombre','Clase 2','A2','211','1121','13'),('2203','Compañeros de clase Guan','Mujer','Clase 2','A3' ,'121','1122','11'),('2204','Guan Classmate','Mujer','Clase 2','A3','121','1122','11'), ('2205','Compañero de clase Liu','Mujer','Clase 2','A3','121','1122','11'),('2206','Compañero de clase Zhang','Hombre', 'Clase 2','A2','211','1121','13'),('2208','Sr. Yang','Hombre','Clase 1','A1','101', ' 1112','30'),('2209','Compañero de clase Cai','Hombre','Clase 1','A1','101','1112','30');
/*!40000 ALTER TABLE `studenttable` HABILITAR TECLAS */;
DESBLOQUEAR MESAS;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

- Volcado completado el 2022-06-05 0:30:03

2. Importe los datos del archivo SQL existente a la base de datos (el requisito previo es que la base de datos exista) 

Lo que estamos diciendo aquí es en realidad dividir el archivo SQL en declaraciones SQL y luego ejecutarlas secuencialmente.

import pymysql
from pathlib import Path

class ConnectMsql:

	def __init__(self, host='localhost', port=3306, user='root',
	             password='root', database="studentmanagersystem", filename: str = "studenttable.sql"):
		"""
        :param host:        域名
        :param port:        端口
        :param user:        用户名
        :param password:    密码
        :param database:    数据库名
        :param filename:    文件名称
        """

		self._host: str = host
		self._port: int = port
		self._user: str = user
		self._password: str = password
		self._database: str = database
		self._file_path = Path(__file__).parent.joinpath(filename)

	def _show_databases_and_create(self):
		"""
        查询数据库是否存在,不存在则进行新建操作
        :return:
        """
		connection = pymysql.connect(host=self._host, port=self._port, user=self._user, password=self._password,
		                             cursorclass=pymysql.cursors.DictCursor)
		with connection:
			with connection.cursor() as cursor:
				cursor.execute('show databases;')
				result = cursor.fetchall()
				results = self._database not in tuple(x["Database"] for x in result)

		if results:
			with connection.cursor() as cursor:
				cursor.execute(f'create database {self._database};')
			with connection.cursor() as cursor:
				cursor.execute('show databases;')
				result = cursor.fetchall()
				results = self._database in tuple(x["Database"] for x in result)
			return results if results else result
		else:
			return True

	def _export_databases_data(self):
		"""
        读取.sql文件,解析处理后,执行sql语句
        :return:
        """
		if self._show_databases_and_create() is True:
			connection = pymysql.connect(host=self._host, port=self._port, user=self._user, password=self._password,
			                             database=self._database, charset='utf8')
			# 读取sql文件,并提取出sql语句
			results, results_list = "", []
			with open(self._file_path, mode="r+", encoding="utf-8") as r:
				for sql in r.readlines():
					# 去除数据中的“\n”和“\r”字符
					sql = sql.replace("\n", "").replace("\r", "")
					# 获取不是“--”开头且不是“--”结束的数据
					if not sql.startswith("--") and not sql.endswith("--"):
						# 获取不是“--”的数据
						if not sql.startswith("--"):
							results = results + sql

				# 根据“;”分割数据,处理后插入列表中
				for i in results.split(";"):
					if i.startswith("/*"):
						results_list.append(i.split("*/")[1] + ";")
						# print(i.split("*/")[1] + ";")
					else:
						results_list.append(i + ";")
						# print(i + ";")

			# 执行sql语句
			with connection:
				with connection.cursor() as cursor:
					# 循环获取sql语句
					for x in results_list[:-1]:
						if x != ";":
							print(x)
							# 执行sql语句
							cursor.execute(x)
							# 提交事务
							connection.commit()
					else:
						return "sql全部语句执行成功 !"


	@property
	def sql_run(self):
		"""
		执行方法
		:return:
		"""
		return self._export_databases_data()


if __name__ == '__main__':
	res = ConnectMsql().sql_run
	print(res)

 Al utilizar el software Navicat para visualizar la base de datos, puede ver que el archivo SQL se importó correctamente.

 3. Utilice Navicat para exportar archivos SQL e importar archivos SQL.

1) Exportar archivo SQL desde la base de datos

Seleccione la tabla de datos a exportar - clic derecho - Volcar a archivo SQL - Datos y estructura

De esta manera, la estructura y los datos de la tabla de datos se pueden guardar juntos en el archivo SQL.

2) Importar archivos SQL a la base de datos 

Haga clic derecho en la base de datos que desea importar: ejecute el archivo SQL

 Después de hacer clic en Inicio, el archivo SQL comenzará a ejecutarse. Aparecerán las siguientes palabras para indicar que el archivo SQL se importó correctamente.

 

Guess you like

Origin blog.csdn.net/qq_45769063/article/details/125127706