【數據庫學習】——Python實現mysql數據庫SQL文件生成和導入

目錄

1、將mysql數據導出到SQL文件中(數據庫存在的情況)

2、將現有的sql文件數據導入到數據庫中(前提數據庫存在)?

?3、利用Navicat導出SQL文件和導入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文件成功

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/255332.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/255332.shtml
英文地址,請注明出處:http://en.pswp.cn/news/255332.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

lfcp——PB使用

場景:記錄以備忘。 1 直接說明 pb連接說明:目前項目共有性能、功能、業務、聯調四個環境。所以pb可以連接四個不同的數據庫。1.copy一份pb程序,修改main.ini文件中的DBCONNECT/DBCONNECT2位new,DBNAME/DBNAME2為oracle數據源中的源…

【重磅】Google官方推出了免費的、中文的、機器學習初級課程。

2019獨角獸企業重金招聘Python工程師標準>>> 機器學習(Machine Learning, ML)是一門多領域交叉學科,涉及概率論、統計學、逼近論、凸分析、算法復雜度理論等多門學科。它是人工智能的核心,是使計算機具有智能的根本途徑,其應用遍及…

市面上常見arduino版本比較

http://arduino.cc/en/Main/Products 詳細鏈接 如果是入門,那么首選UNO R3,方便又省心 如果不是特殊要求,不建議購買2560,因為貴啊 nano是塊很好的控制器,買不買隨你咯 非特殊場合使用不建…

leetcode-114. Flatten Binary Tree to Linked List

Given a binary tree, flatten it to a linked list in-place. For example,Given 1/ \2 5/ \ \3 4 6The flattened tree should look like: 1\2\3\4\5\6思路:遞歸處理,引用二叉鏈表的思想,使用pre記錄上一個分支的指針。Accepted Co…

HALCON示例程序autobahn高速公路車道識別程序剖析

HALCON示例程序autobahn高速公路車道識別程序剖析 小哥哥小姐姐覺得有用點個贊唄! 示例程序源碼(加注釋) *關閉halcon窗口的實時更新 dev_update_window (‘off’) *關閉halcon圖形窗口 dev_close_window () *打開圖形窗口 *dev_open_win…

CSS中的未定義行為,瀏覽器的差異(一)

今天看了張鑫旭大佬的新書的有感吧,記錄一下。 Web標準未對一些場景做出明確規范,所以各大瀏覽器廠家只能根據自己的理解和喜好去實現,表現差異不是瀏覽器的bug,用計算機領域的術語描述為"未定義行為"。 比如一個例子&a…

KVC 和 KVO

作者 沖破繭縛 2015.08.28 16:12* 寫了3967字,被8人關注,獲得了14個喜歡KVC 和 KVO 字數363 閱讀32 評論0 喜歡0KVC (Key Value Coding),鍵值編碼,通過鍵值(字符串)來訪問屬性的機制,來間接修改…

Atmel megaAVR控制器 串行引導Bootloader

開始研究下Bootloader的代碼結構 2015.1.9 粗略看了下,Bootloader主要做了下板卡的初始化 -----> 然后進入for( ; ; )死循環 -----> 循環刷新串口數據 -----> 根據數據做出不同應答 -----> 如果有寫數據,則將數據存入buffer …

MapReduce入門2-流量監控

3、流量監控匯總(使用LongWritable實現) hdfs文件路徑:/tmp/flow.txt 查看文件內容: 13770759991 50 100 25 400 13770759991 800 600 500 100 13770759992 400 300 250 1400 13770759992 800 1200 600 900字符串含義:…

【fiddler學習問題記錄】——手機端證書下載頁打不開、無法將此證書安裝(已解決)

目錄 1、手機端下載頁打不開 解決方法1)電腦端——將網絡設置成公用(親測有效) 解決方法2)手機端將fiddler設置為信任應用,不被攔截 (未試) 2、無法將此證書安裝 方法一:修改證書…

HALCON示例程序ball電路板焊點識別、檢測、測量程序剖析

HALCON示例程序ball電路板焊點識別、檢測、測量程序剖析 示例程序源碼(加注釋) 介紹: ball.hdev: Inspection of Ball Bonding *halcon窗口實時更新關閉 dev_update_window (‘off’) *halcon關閉所有窗口 dev_close_window () *halcon打開…

舵機的原理和控制

控制信號由接收機的通道進入信號調制芯片,獲得直流偏置電壓。它內部有一個基準電路,產生周期為20ms,寬度為1.5ms的基準信號,將獲得的直流偏置電壓與電位器的電壓比較,獲得電壓差輸出。最后,電壓差的正負輸出…

HDFS清理壞塊

報錯 Failed with exception java.io.IOException:org.apache.hadoop.hdfs.BlockMissingException: Could not obtain block: BP-1921057509-192.168.57.129-1517160177567:blk_1073741930_1106 file/user/hive/warehouse/db_hive.db/student/student.txt Time taken: 0.104 se…

如何在PowerDesigner將PDM導出生成WORD文檔或者html文件

a) 使用PowerDesigner打開pdm文件 b) 點擊Report Temlates 制作模板 點擊PowerDesigner菜單欄“Report” -> “Report Templates” c) 選擇模板數據項 完成步驟a),得到如下界面,左右2個區,Aavailable區…

【軟件測試】——基礎篇(軟件測試技術體系、過程管理)

目錄 軟件測試技術體系 軟件測試過程管理?編輯 接口測試用例設計 手機端測試流程?編輯 軟件測試技術體系 軟件測試過程管理 接口測試用例設計 手機端測試流程

vue 的常用模塊安指令(持續記錄)

# 全局安裝 vue-cli $ cnpm install --global vue-cli# 創建一個基于 webpack 模板的新項目 $ vue init webpack my-project # 路由管理模塊 $ npm install vue-router --save # 狀態管理模塊 $ npm install vuex --save # 網絡請求模塊 $ npm install vue-resource --save # 停…

HALCON基于形狀匹配詳解

HALCON基于形狀的模板匹配詳細說明 很早就想總結一下前段時間學習HALCON的心得,但由于其他的事情總是抽不出時間。去年有過一段時間的集中學習,做了許多的練習和實驗,并對基于HDevelop的形狀匹配算法的參數優化進行了研究,寫了一…

俄羅斯:自由軟件在這里生根

2008年6月15日,我在“俄羅斯:自由軟件在這里起飛“一文中介紹了自由軟件在俄羅斯的發展情況。現在,許多年過去了,實際情況如何呢? 回顧以往,俄羅斯境內自由軟件的精英們,在2001年組建了ALTLinux…

小米出招黑科技,5S或成全球首款”Under glass“指紋識別手機

這一次,小米PK蘋果,小米勝。 不得不說,最近的手機圈真是熱鬧,繼三星Note 7爆炸、蘋果iPhone 7發布一度成為新聞熱點之后,小米又來暗戳戳地搶風頭了。 最近小米即將發布的兩款新旗艦消息扎堆,其中基本已經確…

sql中實現取得某字段中數字值

ALTER function [dbo].[GetNum](a nvarchar(4000)) returns nvarchar(4000) as begin while patindex(%[^0-9]%,a)>0 begin set astuff(a,patindex(%[^0-9]%,a),1,) end--select a --299 return a end 例如: 轉載于:https://www.cnblogs.com/fish-ycq/p/6433562.ht…