python學習筆記-mysql數據庫操作

現有一個需求,調用高德api獲取全國縣級以上行政區數據并保存為json文件,使用python獲取:

import requests
import json# 高德API Key
api_key = "your_api_key"# 調用行政區域查詢API
def fetch_districts():url = f"https://restapi.amap.com/v3/config/district?key={api_key}&subdistrict=3&extensions=base"response = requests.get(url)if response.status_code == 200:return response.json()else:print("請求失敗,狀態碼:", response.status_code)return None# 提取省市縣區數據
def extract_regions(districts):regions = []for district in districts:# 提取當前節點if district["level"] in ["province", "city", "district"]:regions.append({"name": district["name"],"level": district["level"],"adcode": district["adcode"],"citycode": district["citycode"],"center": district["center"]})# 遞歸提取子節點if "districts" in district:regions.extend(extract_regions(district["districts"]))return regions# 保存數據為JSON文件
def save_to_json(data, filename):with open(filename, "w", encoding="utf-8") as f:json.dump(data, f, ensure_ascii=False, indent=4)print(f"數據已保存到 {filename}")# 主函數
def main():# 獲取數據data = fetch_districts()if data:# 提取省市縣區數據regions = extract_regions(data["districts"])# 保存為JSON文件save_to_json(regions, "regions.json")if __name__ == "__main__":main()

獲得的行政區數據結構如下(部分數據):

[{"name": "河南省","level": "province","adcode": "410000","citycode": [],"center": "113.753094,34.767052"},{"name": "洛陽市","level": "city","adcode": "410300","citycode": "0379","center": "112.453895,34.619702"},{"name": "新安縣","level": "district","adcode": "410323","citycode": "0379","center": "112.13246,34.728909"}
]

在mysql中新建一張表,存儲這些數據:

CREATE TABLE administrative_regions (id INT AUTO_INCREMENT PRIMARY KEY COMMENT '主鍵ID',name VARCHAR(100) NOT NULL COMMENT '行政區名稱',level VARCHAR(50) NOT NULL COMMENT '行政區級別(province/city/district)',adcode VARCHAR(20) NOT NULL COMMENT '行政區編碼',citycode VARCHAR(20) COMMENT '城市編碼',center VARCHAR(50) COMMENT '行政區中心點坐標',parent_id INT COMMENT '上級行政區ID',first_letter_1 CHAR(1)  COMMENT '行政區名稱第1個字的首字母',first_letter_2 CHAR(1)  COMMENT '行政區名稱第2個字的首字母',CONSTRAINT fk_parent_id FOREIGN KEY (parent_id) REFERENCES administrative_regions(id)
) COMMENT='全國省市縣區數據表';

使用navicat將json數據導入本地數據庫,生成表中name,level,adcode,citycode,center的值。

如果想實現按行政區名稱第1個字和第2個字拼音首字母返回,可借助python的拼音庫為表中first_letter_1和first_letter_2字段賦值,下面說下具體實現步驟:

1.安裝pymysql和pypinyin庫:

pip install pymysqlpip install pypinyin

2.寫一個python腳本,連上mysql數據庫,使用pypinyin庫獲得行政區名稱第1個字和第2個字拼音首字母,然后批量修改first_letter_1和first_letter_2字段的值:

import pymysql
from pypinyin import pinyin, Style# 數據庫連接配置
db_config = {'host': 'localhost','port': 3306,'user': 'root','password': 'root','database': 'area','charset': 'utf8mb4'
}# 獲取漢字的拼音首字母
def get_first_letter(chinese_char):return pinyin(chinese_char, style=Style.FIRST_LETTER)[0][0].upper()
# 連接數據庫
connection = pymysql.connect(**db_config)
cursor = connection.cursor()# 查詢所有行政區名稱
cursor.execute("SELECT id, name FROM administrative_regions")
regions = cursor.fetchall()# 更新 first_letter_1 和 first_letter_2
for region in regions:region_id, name = regionif len(name) >= 1:first_letter_1 = get_first_letter(name[0])else:first_letter_1 = ''if len(name) >= 2:first_letter_2 = get_first_letter(name[1])else:first_letter_2 = ''# 更新數據庫cursor.execute("UPDATE administrative_regions SET first_letter_1 = %s, first_letter_2 = %s WHERE id = %s",(first_letter_1, first_letter_2, region_id))# 提交事務并關閉連接
connection.commit()
cursor.close()
connection.close()

更新后的表數據為:

最后,編寫sql語句,實現按名稱首字母分類返回,本人服務器端程序使用Java開發,下面是示例:

查詢語句:

 SELECT name, first_letter_1 FROM administrative_regions  ORDER BY first_letter_1, first_letter_2

?service代碼:

public Map<String, List<String>> getAreaGroupedByFirstLetter1() {List<AdministrativeRegions> regions = baseMapper.selectAllRegions();Map<String, List<String>> map = regions.stream().collect(Collectors.groupingBy(AdministrativeRegions::getFirstLetter1,Collectors.mapping(AdministrativeRegions::getName, Collectors.toList())));return map;}

最后,得到類似下面的行政區數據:

{

? ? "msg": "操作成功",

? ? "code": 200,

? ? "data": {

? ? ? ? "A": [

? ? ? ? ? ? "昂昂溪區",

? ? ? ? ? ? "阿巴嘎旗",

? ? ? ? ? ? "阿壩藏族羌族自治州",

? ? ? ? ? ? "阿壩縣",

? ? ? ? ? ? "阿城區",

? ? ? ? ? ??? ?..............

? ? ? ? ? ? ],

? ? ? ?....

? ?}

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

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

相關文章

Redisson 實現分布式鎖源碼淺析

大家好&#xff0c;我是此林。 今天來分享Redisson分布式鎖源碼。還是一樣&#xff0c;我們用 問題驅動 的方式展開講述。 1. redis 中如何使用 lua 腳本&#xff1f; Redis內置了lua解釋器&#xff0c;lua腳本有兩個好處&#xff1a; 1. 減少多次Redis命令的網絡傳輸開銷。…

【軟件】免費的PDF全文翻譯軟件,能保留公式圖表的樣式

轉載請注明出處&#xff1a;小鋒學長生活大爆炸[xfxuezhagn.cn] 如果本文幫助到了你&#xff0c;歡迎[點贊、收藏、關注]哦~ 很多PDF全文翻譯軟件都是收費的&#xff0c;而劃線翻譯看著又很累。這個開源的PDF全文翻譯軟件非常好用&#xff0c;并且能夠保留公式、圖表、目錄和注…

CentOS 7 系統上安裝 SQLite

1. 檢查系統更新 在安裝新軟件之前&#xff0c;建議先更新系統的軟件包列表&#xff0c;以確保使用的是最新的軟件源和補丁。打開終端&#xff0c;執行以下命令&#xff1a; sudo yum update -y -y 選項表示在更新過程中自動回答 “yes”&#xff0c;避免手動確認。 2. 安裝 …

Gin(后端)和 Vue3(前端)中實現 Server-Sent Events(SSE)推送

在 Gin&#xff08;后端&#xff09;和 Vue3&#xff08;前端&#xff09;中實現 Server-Sent Events&#xff08;SSE&#xff09;推送&#xff0c;主要分為以下幾個步驟&#xff1a; 后端&#xff08;Gin&#xff09;實現 SSE Gin 框架可以使用 c.SSEvent 方法來推送 SSE 事…

大模型微調中顯存占用和訓練時間的影響因素

BatchSize 顯存占用&#xff1a;與batch_size呈線性關系&#xff0c;可理解為 M t o t a l M f i x e d B a t c h S i z e ? M p e r ? s a m p l e M_{total}M_{fixed}BatchSize*M_{per-sample} Mtotal?Mfixed?BatchSize?Mper?sample?&#xff0c;其中 M f i x e d…

【排序算法對比】快速排序、歸并排序、堆排序

排序算法對比&#xff1a;快速排序、歸并排序、堆排序 1. 快速排序&#xff08;Quick Sort&#xff09; 原理 快速排序采用 分治法&#xff08;Divide and Conquer&#xff09;&#xff0c;通過選取基準值&#xff08;pivot&#xff09;&#xff0c;將數組劃分為 小于基準值…

PentestGPT 下載

PentestGPT 下載 PentestGPT 介紹 PentestGPT&#xff08;Penetration Testing GPT&#xff09;是一個基于大語言模型&#xff08;LLM&#xff09;的智能滲透測試助手。它結合了 ChatGPT&#xff08;或其他 GPT 模型&#xff09;與滲透測試工具&#xff0c;幫助安全研究人員自…

防火墻虛擬系統實驗

一實驗拓撲 二實驗過程 配置資源 創建虛擬系統 配置管理員 創建安全策略

代碼隨想錄算法訓練營第31天 | 56. 合并區間 738.單調遞增的數字 968.監控二叉樹

56. 合并區間 代碼隨想錄 56. 合并區間 - 力扣&#xff08;LeetCode&#xff09; class Solution {public int[][] merge(int[][] intervals) {Arrays.sort(intervals,(a,b)->{if(a[0] b[0])return a[1] - b[1];return a[0] - b[0];});List<int[]> result new Arra…

Go語言對于MySQL的基本操作

一.下載依賴 終端中輸入&#xff1a; go get -u github.com/go-sql-driver/mysql 導入包 import ("database/sql"_ "github.com/go-sql-driver/mysql" ) 二.案例 package main//go get-u github.com/go-sql-driver/mysql 獲取驅動 import ("databa…

Linux與深入HTTP序列化和反序列化

深入HTTP序列化和反序列化 本篇介紹 在上一節已經完成了客戶端和服務端基本的HTTP通信&#xff0c;但是前面的傳遞并沒有完全體現出HTTP的序列化和反序列化&#xff0c;為了更好得理解其工作流程&#xff0c;在本節會以更加具體的方式分析到HTTP序列化和反序列化 本節會在介紹…

基于Python+SQLite實現(Web)驗室設備管理系統

實驗室設備管理系統 應用背景 為方便實驗室進行設備管理&#xff0c;某大學擬開發實驗室設備管理系統 來管理所有實驗室里的各種設備。系統可實現管理員登錄&#xff0c;查看現有的所有設備&#xff0c; 增加設備等功能。 開發環境 Mac OSPyCharm IDEPython3Flask&#xff…

深拷貝and淺拷貝!

一、什么是拷貝&#xff1f;什么是深拷貝和淺拷貝&#xff1f; &#xff08;1&#xff09;拷貝&#xff1a;拷貝就是為了復用原對象的部分or全部數據&#xff0c;在原對象的基礎上通過復制的方式創建一個新的對象。 拷貝對象可以分為三種類型&#xff1a;直接賦值、淺拷貝和深拷…

高頻面試題(含筆試高頻算法整理)基本總結回顧43

干貨分享&#xff0c;感謝您的閱讀&#xff01; &#xff08;暫存篇---后續會刪除&#xff0c;完整版和持續更新見高頻面試題基本總結回顧&#xff08;含筆試高頻算法整理&#xff09;&#xff09; 備注&#xff1a;引用請標注出處&#xff0c;同時存在的問題請在相關博客留言…

《靈珠覺醒:從零到算法金仙的C++修煉》卷三·天劫試煉(34)混元金斗裝萬物 - 0-1背包問題(二維DP)

《靈珠覺醒:從零到算法金仙的C++修煉》卷三天劫試煉(34)混元金斗裝萬物 - 0-1背包問題(二維DP) 哪吒在數據修仙界中繼續他的修煉之旅。這一次,他來到了一片神秘的混元谷,谷中有一座巨大的混元金斗,斗身閃爍著神秘的光芒。谷口有一塊巨大的石碑,上面刻著一行文字:“欲…

網絡爬蟲【簡介】

我叫補三補四&#xff0c;很高興見到大家&#xff0c;歡迎一起學習交流和進步 今天來講一講視圖 一、網絡爬蟲的定義 網絡爬蟲&#xff08;Web Crawler&#xff09;&#xff0c;又稱為網絡蜘蛛、網絡機器人等&#xff0c;是一種按照一定規則自動抓取互聯網信息的程序或腳本。它…

?AI時代到來,對電商來說是效率躍升,還是溫水煮青蛙

?凌晨三點的義烏商貿城&#xff0c;95后創業者小王&#xff0c;靜靜地盯著屏幕上的AI工具&#xff0c;竟露出了笑容。這個月他的跨境玩具店銷量提升了不少&#xff0c;從之前的狀態翻了3倍&#xff1b;而且團隊人數有所變化&#xff0c;從5人縮減到了2人&#xff08;其中包括他…

PDF文件密碼保護破解:安全解密的步驟與技巧

PDF文件加密后&#xff0c;需要特定的密碼才能訪問內容。以下是一些常見的方法來解密PDF文件&#xff1a; 方法一&#xff1a;使用Adobe Acrobat 如果你有Adobe Acrobat Pro&#xff0c;可以使用它來解密PDF文件。 打開Adobe Acrobat Pro&#xff1a; 啟動Adobe Acrobat Pro…

qt 自帶虛擬鍵盤的編譯使用記錄

一、windows 下編譯 使用vs 命令窗口&#xff0c;分別執行&#xff1a; qmake CONFIG"lang-en_GB lang-zh_CN" nmake nmake install 如果事先沒有 指定需要使用的輸入法語言就進行過編譯&#xff0c;則需要先 執行 nmake distclean 清理后執行 qmake 才能生效。 …

Java開發之數據庫應用:記一次醫療系統數據庫遷移引發的異常:從MySQL到PostgreSQL的“dual“表陷阱與突圍之路

記一次醫療系統數據庫遷移引發的異常&#xff1a;從MySQL到PostgreSQL的"dual"表陷阱與突圍之路 一、驚魂時刻&#xff1a;數據庫切換引發的系統雪崩 某醫療影像系統在進行國產化改造過程中&#xff0c;將原MySQL數據庫遷移至PostgreSQL。遷移完成后&#xff0c;系…