MacOS13-將數據庫轉為markdown,docx格式

MacOS13-將數據庫轉為markdown,docx格式

文章目錄

  • 先說踩坑點
    • 各種模塊缺失
  • 代碼
  • 效果
  • 總結
  • 參考

先說踩坑點

各種模塊缺失

tkinter

mysql

沒錯,你可以直接點擊安裝;

請添加圖片描述

如果還出現報錯
請添加圖片描述

你需要打開終端

pip install mysqlclient

再次點進去安裝后會出現導包,選擇第二個

同樣在這個頁面,搜索安裝各種模塊

docx

報錯

“Traceback (most recent call last):File "/Users/lin/Desktop/Python/mysql/tomd.py", line 4, in <module>from docx import Document”

請添加圖片描述

但是這里又出現了一個問題

由于我是使用anaconda的python環境

需要更換為本地的安裝的python3.11
請添加圖片描述

我還是使用之前項目的3.11(同一個版本),換了之后同樣出現tk無法查找模塊的話

先查找本機python匹配的版本

brew search python-tk
==> Formulae
python-tk@3.10     python-tk@3.9       python@3.7          python@3.9 
python-tk@3.11      python-yq           python@3.8

最后安裝

brew install python-tk@3.11

最后安裝tkinterMessagebox,安裝好后如下圖

請添加圖片描述

代碼

from tkinter import *
from tkinter import messageboximport mysql.connector
from docx import Document
from tabulate import tabulate# 連接到MySQL數據庫
def connect_to_database():host = host_entry.get()user = user_entry.get()password = password_entry.get()database = database_entry.get()try:conn = mysql.connector.connect(host=host,port=3306,user=user,password=password,database=database)return connexcept mysql.connector.Error as err:messagebox.showerror("錯誤", f"連接到MySQL數據庫時出錯:{err}")return None# 獲取數據庫中的表信息及字段注釋
def get_table_info(conn):tables_info = []if conn:cursor = conn.cursor()cursor.execute("SHOW TABLES")tables = cursor.fetchall()for table in tables:table_name = table[0]cursor.execute(f"DESCRIBE {table_name}")table_structure = cursor.fetchall()tables_info.append({"table_name": table_name,"structure": table_structure})cursor.close()return tables_info# 獲取字段注釋
def get_field_comment(table_name, field_name):cursor = conn.cursor()cursor.execute(f"SHOW FULL COLUMNS FROM {table_name} WHERE Field = '{field_name}'")column_info = cursor.fetchone()comment = column_info[8]  # 注釋信息在第9個元素中cursor.close()return comment# 生成Markdown格式的數據庫文檔
def generate_markdown_documentation(tables_info):documentation = "# 數據庫文檔\n\n"documentation += f"數據庫地址:{host_entry.get()}\n"documentation += f"用戶名:{user_entry.get()}\n"documentation += f"數據庫名稱:{database_entry.get()}\n\n"for table_info in tables_info:table_name = table_info["table_name"]structure = table_info["structure"]documentation += f"## {table_name}\n\n"headers = ["字段", "類型", "允許空值", "鍵", "默認值", "額外信息", "注釋"]  # 添加注釋列rows = []for field_info in structure:rows.append(list(field_info) +[get_field_comment(table_name, field_info[0])])  # 獲取字段注釋并添加到行中documentation += tabulate(rows, headers, tablefmt="pipe") + "\n\n"return documentation# 生成docx格式的數據庫文檔
def generate_docx_documentation(tables_info):doc = Document()doc.add_heading('數據庫文檔', 0)doc.add_paragraph(f"數據庫地址:{host_entry.get()}")doc.add_paragraph(f"用戶名:{user_entry.get()}")doc.add_paragraph(f"數據庫名稱:{database_entry.get()}")for table_info in tables_info:table_name = table_info["table_name"]structure = table_info["structure"]doc.add_heading(table_name, level=1)# 創建帶邊框的表格table = doc.add_table(rows=1, cols=7)table.style = 'Table Grid'  # 設置表格樣式為帶邊框的樣式table.autofit = False  # 禁止自動調整列寬hdr_cells = table.rows[0].cellshdr_cells[0].text = '字段'hdr_cells[1].text = '類型'hdr_cells[2].text = '允許空值'hdr_cells[3].text = '鍵'hdr_cells[4].text = '默認值'hdr_cells[5].text = '額外信息'hdr_cells[6].text = '注釋'  # 添加注釋列for field_info in structure:row_cells = table.add_row().cellsrow_cells[0].text = field_info[0]row_cells[1].text = field_info[1]row_cells[2].text = field_info[2]row_cells[3].text = field_info[3]row_cells[4].text = field_info[4] if field_info[4] is not None else ""row_cells[5].text = field_info[5]row_cells[6].text = get_field_comment(table_name,field_info[0])  # 獲取并顯示字段注釋return doc# 創建標簽和輸入框
def create_input_fields(root, fields):entries = {}for row, (label_text, entry_text) in enumerate(fields):label = Label(root, text=label_text)label.grid(row=row, column=0, padx=10, pady=10, sticky="w")entry = Entry(root)entry.grid(row=row, column=1, padx=10, pady=10)entry.insert(0, entry_text)entries[label_text] = entry# 添加文檔類型選擇器label = Label(root, text="文檔類型:")label.grid(row=len(fields), column=0, padx=10, pady=10, sticky="w")doc_type = StringVar(root)doc_type.set("Markdown")  # 默認選擇 Markdowndoc_type_menu = OptionMenu(root, doc_type, "Markdown", "Docx")doc_type_menu.grid(row=len(fields), column=1, padx=10, pady=10, sticky="w")entries["文檔類型:"] = doc_typereturn entries# 生成文檔
def generate_document():global conn  # 在函數內部使用全局變量 connconn = connect_to_database()if conn:tables_info = get_table_info(conn)if entries["文檔類型:"].get() == "Markdown":  # 獲取文檔類型documentation = generate_markdown_documentation(tables_info)with open("數據庫文檔.md", "w", encoding="utf-8") as file:file.write(documentation)messagebox.showinfo("成功", "Markdown文檔生成成功!")elif entries["文檔類型:"].get() == "Docx":doc = generate_docx_documentation(tables_info)doc.save("數據庫文檔.docx")messagebox.showinfo("成功", "Docx文檔生成成功!")# 創建主窗口
root = Tk()
root.title("數據庫文檔生成器")
root.geometry("400x300")# 標簽和輸入框的內容
fields = [("主機地址:", ""), ("用戶名:", ""), ("密碼:", ""), ("數據庫名稱:", "")]
# 創建標簽和輸入框
entries = create_input_fields(root, fields)
# 獲取輸入框的內容
host_entry = entries["主機地址:"]
user_entry = entries["用戶名:"]
password_entry = entries["密碼:"]
database_entry = entries["數據庫名稱:"]
# 生成文檔按鈕
generate_button = Button(root, text="生成文檔", command=generate_document)
generate_button.grid(row=len(fields) + 1, columnspan=2, padx=10, pady=10)
root.mainloop()

效果

請添加圖片描述

請添加圖片描述

最后markdown格式會生成在py文件的同級目錄下

請添加圖片描述

請添加圖片描述

總結

還是需要一步一步來,打好基礎,比如我現在雖然寫完文檔了,程序可以跑了,但是依舊不是很懂基本的python設置,所以基礎真的很重要,后面找個時間好好看看基礎部分

參考

https://blog.csdn.net/tekin_cn/article/details/135271779

https://zhuanlan.zhihu.com/p/692851609

https://juejin.cn/post/7346580626318983180

https://blog.csdn.net/qq_44874645/article/details/109311212

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

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

相關文章

xcode開發swift允許發送http請求設置

Xcode 現在新建項目默認只支持HTTPS請求&#xff0c;認為HTTP請求不安全&#xff0c;所以不支持。但是開發環境一般都是http模式&#xff0c;所以需要單獨配置才可以訪問。 需要到項目的設置里面&#xff0c;點擊info&#xff0c;如果沒有App Transport Security Setting這一項…

項目優化方案之---實現郵箱用戶登錄

之前的項目中我寫的基于SpringBoot和Vue的全棧項目已經實現了基本的用戶接口開發&#xff0c; 不過其代碼的功能單一&#xff0c;而且寫的也是有不少漏洞&#xff08;基本就像剛接手的代碼*山一樣&#xff09; 那之后的幾篇文章都來分享一下如何優化項目&#xff08;每一章都獨…

Python優化、異常處理與性能提升技巧

Python作為一種高效的編程語言&#xff0c;其靈活性和強大的功能使得它成為了許多開發者的首選。在日常的編程實踐中&#xff0c;掌握一些高效的Python技巧可以極大地提升開發效率和代碼質量。本文將介紹五個關于Python使用技巧&#xff0c;幫助你更加熟練地運用Python解決問題…

JMeter性能測試實現與分析分享

JMeter是由著名開源軟件巨頭Apache組織開發的純Java的壓力測試工具&#xff0c;它即能測試動態服務&#xff08;WebService&#xff09;&#xff0c;也能測試靜態資源&#xff0c;包括Servlet服務、CGI腳本等&#xff0c;還能測試動態語言服務&#xff08;PHP、Java、ASP.NET等…

Cocos Creator開發學習路線

1.JavaScript與TypeScript程序設計 由于可以跨平臺發布,同時要能支持h5的游戲,cocos creator選擇了JavaScript與TypeScript來做為它的開發語言,所以我們要先學習JavaScript與TypeScript。TypeScript是基于JavaScript的一個語法糖,運行的時候被編譯為JavaScript,所以我們要…

JVM學習-監控工具(二)

jmap&#xff1a;導出內存映像文件&內存使用情況 基本情況 jmap(JVM Memory Map)&#xff1a;一方法獲取dump文件(堆轉儲快照文件&#xff0c;二進制文件)&#xff0c;還可以獲取目標Java進程的內存相關信息&#xff0c;包括Java堆各區域的使用情況、堆中對象的統計信息、…

MyBatis學習(二)--MyBatis獲取參數值的兩種方式

1、搭建新的module:mybatis_parameter MyBatis獲取參數值的兩種方式&#xff1a;${}和#{} ${}的本質就是字符串拼接&#xff0c;采用sql拼接&#xff0c;無法防止sql注入 #{}的本質就是占位符賦值 &#xff0c;采用預編譯 防止sql注入 不同參數使用案例 2、單個字面量類型…

OpenHarmony嵌套類對象屬性變化:@Observed裝飾器和@ObjectLink裝飾器

上文所述的裝飾器僅能觀察到第一層的變化&#xff0c;但是在實際應用開發中&#xff0c;應用會根據開發需要&#xff0c;封裝自己的數據模型。對于多層嵌套的情況&#xff0c;比如二維數組&#xff0c;或者數組項class&#xff0c;或者class的屬性是class&#xff0c;他們的第二…

實時瞳孔分割算法-RITnet論文復現

源代碼在這里RITnet-Github 這個模型比較小眾&#xff0c;我們實驗室使用了官方提供的模型進行瞳孔中心位置提取&#xff0c;以實現視線追蹤&#xff0c;效果很好 一、數據集準備 RITnet也是那一屆openEDS數據集挑戰賽的冠軍模型&#xff0c;openEDS數據集可以從Kaggle上下載&a…

數據結構--關鍵路徑

事件v1-表示整個工程開始&#xff08;源點&#xff1a;入度為0的頂點&#xff09; 事件v9-表示整個工程結束&#xff08;匯點&#xff1a;出度為0的頂點&#xff09; 關鍵路徑&#xff1a;路徑長度最長的路徑 求解關鍵路徑問題&#xff08;AOE網&#xff09; 定義四個描述量 …

網絡網絡層之(6)ICMPv4協議

網絡網絡層之(6)ICMPv4協議 Author: Once Day Date: 2024年6月2日 一位熱衷于Linux學習和開發的菜鳥&#xff0c;試圖譜寫一場冒險之旅&#xff0c;也許終點只是一場白日夢… 漫漫長路&#xff0c;有人對你微笑過嘛… 全系列文章可參考專欄: 通信網絡技術_Once-Day的博客-CS…

華為OD刷題C卷 - 每日刷題 7(字符串分隔(二)、歡樂的周末)

兩段代碼分別解決了兩個不同的問題&#xff0c;下面是對它們的概述&#xff1a; 1、&#xff08;字符串分隔&#xff08;二&#xff09;&#xff09;&#xff1a; 這段代碼是解決“字符串分隔&#xff08;二&#xff09;”的問題。它提供了一個Java類Main&#xff0c;其中包含…

Java面試題-Tomcat高級面試題

Tomcat 9相較于之前的版本有哪些主要的新特性&#xff1f; Tomcat 9相較于之前的版本&#xff0c;主要有以下幾個新特性&#xff1a; HTTP/2支持&#xff1a;Tomcat 9引入了對HTTP/2協議的支持&#xff0c;這可以顯著提高網站的性能和安全性。HTTP/2協議允許單個連接上進行多…

多語言for循環遍歷總結

多語言for循環遍歷總結 工作中經常需要遍歷對象&#xff0c;但不同編程語言之間存在一些細微差別。為了便于比較和參考&#xff0c;這里對一些常用的遍歷方法進行了總結。 JAVA 數組遍歷 Test void ArrayForTest() {String[] array {"劉備","關羽", &…

大模型備案項目補貼政策一覽【保持更新】

大模型項目、AI類項目、大模型備案通過后等一籃子財政補貼政策 上海市 加快創新體系構建 1. 提升自主創新水平&#xff1a;對引領大模型發展或取得顛覆性突破的項目&#xff0c;最高給予1000萬元補貼支持。 2. 加強算力資源保障&#xff1a;實施算力伙伴計劃&#xff0c;對…

力扣174題動態規劃:地下城游戲(含模擬面試)

?????? 歡迎來到我的博客。希望您能在這里找到既有價值又有趣的內容&#xff0c;和我一起探索、學習和成長。歡迎評論區暢所欲言、享受知識的樂趣&#xff01; 推薦&#xff1a;數據分析螺絲釘的首頁 關注微信公眾號 數據分析螺絲釘 免費領取價值萬元的python/java/商業…

Java進階學習筆記36——算法

什么是算法&#xff1f; 解決某個實際問題的過程和方法。 1&#xff09;導航&#xff1b; 2&#xff09;滴滴打車&#xff1b; 3&#xff09;抖音&#xff1b; 不同的算法&#xff0c;效率高、性能好&#xff01; 在Java中&#xff0c;代碼已經幫我們寫好了&#xff0c;但為…

雪花算法詳解及源碼分析

雪花算法的簡介&#xff1a; 雪花算法用來實現全局唯一ID的業務主鍵&#xff0c;解決分庫分表之后主鍵的唯一性問題&#xff0c;所以就單從全局唯一性來說&#xff0c;其實有很多的解決方法&#xff0c;比如說UUID、數據庫的全局表的自增ID 但是在實際的開發過程中&#xff0…

離散點云擬合三維平面參數推導(基于最小二乘)

1、背景介紹 實際中&#xff0c;很多人工構造物是由平面結構構造而成&#xff0c;如下圖所示&#xff0c;為一典型的由多個平面組成的人工構筑物。因此&#xff0c;根據離散點擬合成平面&#xff0c;獲取擬合平面方程&#xff0c;是點云數據處理中非常常見的數據處理操作。 2、…

鴻蒙Ability Kit(程序框架服務)【ExtensionAbility組件】

ExtensionAbility組件 ExtensionAbility組件是基于特定場景&#xff08;例如服務卡片、輸入法等&#xff09;提供的應用組件&#xff0c;以便滿足更多的使用場景。 每一個具體場景對應一個[ExtensionAbilityType]&#xff0c;開發者只能使用&#xff08;包括實現和訪問&#…