python学习笔记-mysql数据库操作

server/2025/3/15 0:09:57/

现有一个需求,调用高德api获取全国县级以上行政区数据并保存为json文件,使用python获取:

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库:

python">pip install pymysqlpip install pypinyin

2.写一个python脚本,连上mysql数据库,使用pypinyin库获得行政区名称第1个字和第2个字拼音首字母,然后批量修改first_letter_1和first_letter_2字段的值:

python">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.ppmy.cn/server/175010.html

相关文章

神经网络完成训练的详细过程

神经网络完成训练的详细过程 一、神经网络的基本概念 神经网络是一种模拟人脑神经系统的计算模型&#xff0c;由大量的神经元&#xff08;节点&#xff09;和它们之间的连接&#xff08;权重&#xff09;组成。神经元接收输入信号&#xff0c;通过加权求和和激活函数的处理&a…

vscode 中快捷生成模板快捷键

1. 使用 Emmet 缩写 Emmet 是一个强大的工具&#xff0c;可以帮助你快速生成 HTML、CSS 等代码模板。 HTML 模板: 输入 ! 然后按下 Tab 键&#xff0c;Emmet 会自动生成一个基本的 HTML5 模板。 <!DOCTYPE html> <html lang"en"><head><meta c…

子母钟系统,京准电子科技助力高考精准计时

子母钟系统&#xff0c;京准电子科技助力高考精准计时 子母钟系统&#xff0c;京准电子科技助力高考精准计时 【摘要】子母钟系统又叫网络时钟系统是校园网络中一个重要的精准计时系统&#xff0c;随着网络的普及&#xff0c;许多校园都建了自己的校园专网&#xff0c;使用的…

Redis——缓存穿透、击穿、雪崩

缓存穿透 什么是缓存穿透 缓存穿透说简单点就是大量请求的 key 根本不存在于缓存中&#xff0c;导致请求直接到了数据库上&#xff0c;根本没有经过缓存这一层。举个例子&#xff1a;某个黑客故意制造我们缓存中不存在的 key 发起大量请求&#xff0c;导致大量请求落到数据库…

C# 事件使用详解

总目录 前言 在C#中&#xff0c;事件&#xff08;Events&#xff09;是一种基于委托的重要机制&#xff0c;用于实现对象之间的松耦合通信。它通过发布-订阅模式&#xff08;Publisher-Subscriber Pattern&#xff09;&#xff0c;允许一个对象&#xff08;发布者&#xff09;…

HarmonyOS

概述 HarmonyOS与Android操作系统对比 1.内核方面的对比&#xff1a; 安卓系统是基于linux的宏内核设计。宏内核包含了操作系统绝大多数的功能和模块&#xff0c;而且这些功能和模块都具有最高的权限&#xff0c;只要一个模块出错&#xff0c;整个系统就会崩溃&#xff0c;这也…

每日十题八股-2025年3月13日-关于垃圾回收的笔记

被面试伤透了心&#xff0c;手撕不出来的算法题&#xff0c;背得零零落落的八股。最经常说的话是&#xff1a;对不起&#xff0c;我不太记得了&#xff0c;我不太清楚这个&#xff0c;我没有考虑到。然后一被问并发就回答&#xff1a;加锁&#xff0c;加锁加锁。 以下的各种图…

DeepSeek Kimi详细生成PPT的步骤

以下是使用 DeepSeek 和 Kimi 协作生成 PPT 的详细步骤&#xff0c;结合了两者的优势实现高效创作&#xff1a; 第一步&#xff1a;使用 DeepSeek 生成 PPT 大纲或内容 明确需求并输入提示词 在 DeepSeek 的对话界面中&#xff0c;输入具体指令&#xff0c;要求生成 PPT 大纲或…