目錄
1、將mysql數據導出到SQL文件中(數據庫存在的情況)
2、將現有的sql文件數據導入到數據庫中(前提數據庫存在)?
1)從數據庫導出SQL文件
2)導入SQL文件到數據庫?
1、將mysql數據導出到SQL文件中(數據庫存在的情況)
主要需要修改數據庫的相關信息,端口號、用戶名、密碼等
其中數據庫得存在,不然會報錯?
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2022/5/29 13:06
# @Author : @linlianqin
# @Site :
# @File : exportSqlFile.py
# @Software: PyCharm
# @description:導出數據庫文件sqlimport osclass 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 resultif __name__ == '__main__':initSql = InitSql()initSql.import_server_db()
生成的sql文件如下所示:
-- MySQL dump 10.13 Distrib 8.0.29, for Win64 (x86_64) -- -- Host: localhost Database: studentmanagersystem -- ------------------------------------------------------ -- Server version 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 SET NAMES 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 */;-- -- Table structure for table `studenttable` --DROP TABLE IF EXISTS `studenttable`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `studenttable` (`number` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,`sex` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,`classes` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,`floor` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,`room` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,`tel` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,`money` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,PRIMARY KEY (`number`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC; /*!40101 SET character_set_client = @saved_cs_client */;-- -- Dumping data for table `studenttable` --LOCK TABLES `studenttable` WRITE; /*!40000 ALTER TABLE `studenttable` DISABLE KEYS */; INSERT INTO `studenttable` VALUES ('2201','劉同學','男','1班','A1','101','1112','30'),('2202','張同學','男','2班','A2','211','1121','13'),('2203','管同學','女','2班','A3','121','1122','11'),('2204','管同學','女','2班','A3','121','1122','11'),('2205','劉同學','女','2班','A3','121','1122','11'),('2206','張同學','男','2班','A2','211','1121','13'),('2208','楊同學','男','1班','A1','101','1112','30'),('2209','蔡同學','男','1班','A1','101','1112','30'); /*!40000 ALTER TABLE `studenttable` ENABLE KEYS */; UNLOCK TABLES; /*!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 */;-- Dump completed on 2022-06-05 0:30:03
2、將現有的sql文件數據導入到數據庫中(前提數據庫存在)?
這里的話其實就是將SQL文件進行分割成一條條SQL語句,然后順序執行即可
import pymysql
from pathlib import Pathclass 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 = hostself._port: int = portself._user: str = userself._password: str = passwordself._database: str = databaseself._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 resultelse:return Truedef _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全部語句執行成功 !"@propertydef sql_run(self):"""執行方法:return:"""return self._export_databases_data()if __name__ == '__main__':res = ConnectMsql().sql_runprint(res)
?利用Navicat軟件可視化數據庫,可以看到導入SQL文件成功
?3、利用Navicat導出SQL文件和導入SQL文件
1)從數據庫導出SQL文件
選擇需要導出的數據表——右鍵——轉儲為SQL文件——數據和結構
這樣就可以將數據表的結構和數據都一起保存在SQL文件中
2)導入SQL文件到數據庫?
右鍵選中需要導入的數據庫——運行SQL文件
?點擊開始后,即開始運行SQL文件,出現下述字樣表明導入SQL文件成功
?