目次
1. mysql データを 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:导出数据库文件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()
生成される SQL ファイルは次のとおりです。
-- MySQL ダンプ 10.13 ディストリビュート 8.0.29、Win64 (x86_64) 用 -- -- ホスト: localhost データベース:studentmanagersystem -- ----------------------- ----------------------------- -- サーバー バージョン 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 セット名 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 */; -- -- テーブル `studenttable` のテーブル構造 -- DROP TABLE IF EXISTS `studenttable`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!50503 SET 文字セットクライアント = 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) CHARACT ER セット utf8mb4 照合 utf8mb4_0900_ai_ci デフォルト NULL 、 `classes` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL、 /*!40000 ALTER TABLE `studenttable` キーを無効にします */; `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 デフォルト NULL、 主キー (`number `) BTREE の使用 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC; /*!40101 SETcharacter_set_client = @saved_cs_client */; -- -- テーブル `studenttable` のデータをダンプしています -- LOCK TABLES `studenttable` WRITE;'男','1班','A1','101','1112','30'); /*!40000 ALTER TABLE `studenttable` ENABLE KEYS */; テーブルのロックを解除します。 /*!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 */; 40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; 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 */; -- ダンプ完了: 2022-06-05 0:30:03
2. 既存の SQL ファイル データをデータベースにインポートします (前提条件はデータベースが存在することです)。
ここで言っているのは、実際には SQL ファイルを SQL ステートメントに分割し、それらを順次実行することです。
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)
Navicat ソフトウェアを使用してデータベースを視覚化すると、SQL ファイルが正常にインポートされたことがわかります。
3. Navicat を使用して SQL ファイルをエクスポートし、SQL ファイルをインポートします。
1) データベースから SQL ファイルをエクスポート
エクスポートするデータテーブルを選択 - 右クリック - SQL ファイルにダンプ - データと構造
このようにして、データテーブルの構造とデータをまとめて SQL ファイルに保存できます。
2) SQL ファイルをデータベースにインポートする
インポートするデータベースを右クリックし、SQL ファイルを実行します。
「開始」をクリックすると、SQL ファイルの実行が開始され、SQL ファイルが正常にインポートされたことを示す次の文字が表示されます。