fp task1

本文介绍了如何通过Python实现城市数据的建模及插入过程,包括定义字母和城市模型、生成数据表、从JSON文件中读取数据并插入到数据库中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前一篇文章里,已经完成了基本框架的搭建。

task 1 (区域):根据参考应用的模型,完成城市的数据插入(根据字母排序)。

  准备工作:获取所有城市的json 数据。

                     创建数据表(字母模型和城市模型)

创建一个名为resource 的文件夹,专门用来城市的json数据并创建一个cityModel(models下)的 文件。

在cityModel.py中完成对字母和城市模型的定义:

# 字母
class Letter(db.Model):
    __tablename__ = 'letters'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    # 字母
    letter = db.Column(db.String(2), nullable=False)


# 城市
class City(db.Model):
    # 表名
    __tablename__ = 'cities'
    # id
    id = db.Column(db.Integer, primary_key=True, autoincrement=False)
    # 城市名
    regionName = db.Column(db.String(32), nullable=False)
    # 城市编号
    cityCode = db.Column(db.Integer, nullable=False)
    # 拼音
    pinYin = db.Column(db.String(32), nullable=False)
    # 字母
    letter_id = db.Column(db.Integer, db.ForeignKey(Letter.id))

执行命令,生成数据表。

定义好模型后,插入城市和字母数据(resource/insertCity.py)。

import json
#插入数据第一步,连接数据库。
import pymysql


conn = pymysql.connect(host='127.0.0.1', user='****', password="*****",
                       database='DevTpp', port=3306,
                       charset='utf8')

#游标
cursor = conn.cursor()

with open('city.json','r',encoding='utf-8')as f:
    #读json文件
    city_dict = json.load(f)
#字母
    for letter in city_dict['returnValue'].keys():
        print(letter)

        letter_sql = "INSERT INTO letters(letter) VALUES (%r)" % (letter)
        # 开启事务
        try:
            conn.begin()
            # 插入字母
            cursor.execute(letter_sql)
            conn.commit()
        except Exception as e:
            conn.rollback()
#城市
        for city in city_dict['returnValue'][letter]:
            print(city)
            # 先 查询 字母的id
            cursor.execute('SELECT id FROM letters WHERE letter="{}"'.format(letter))
            #获取id,fetchone()查的是元组
            letter_id = cursor.fetchone()[0]
            id = city['id']

            regionName = city['regionName']
            cityCode = city['cityCode']
            pinYin = city['pinYin']
            city_sql = "INSERT INTO cities(id,regionName,cityCode,pinYin,letter_id) " \
                       "VALUES(%d,%r,%d,%r,%d)" % (id, regionName, cityCode, pinYin, letter_id)
            #开始执行
            try:
                conn.begin()
                # 插入字母
                cursor.execute(city_sql)
                conn.commit()
            except Exception as e:
                conn.rollback()
            print(city)


task 1 圆满完成。

 

已知一个ASCII码文件,文件名为dict.dic,该文件中只包含ASCII码中的字符,即可对应整数0—127。我们将ASCII码中的字符分为4类,第一类为大写字母“A—Z”、第二类为小写字母“a—z”、第三类为数字字符“0—9”、第四类为其他字符“!@#$%^&*” 等等(不属于前三类的字符即为第四类)。 要求: 1.统计出这四类字符在该文件中的数量。 2.统计出该文件的行数、行最大长度、行最小长度。这里要注意,虽然文件的换行符确实为一个字符,ASCII码为10,但在统计行长度时,文件中的换行符并不统计在内。 3.输出具体的大小写字母的统计信息,每行一个字母。 4.处理完成后,关闭文件。 内容提示:在本题对文件的操作内容中,会用到三个新的C语言文件操作函数,一种新的打开文件的方式,如下: 1.FILE *fp=fopen("file.txt","r");//fp即为文件指针,"file.txt"为待打开的文件名,此时应与该程序在一个目录下,"r"为以只读方式打开ASCII码文件。 2.int ch=fgetc(fp);//从fp指向的文件中读取一个字节(字符),存入变量ch内。 3.fclose(fp);//关闭fp指向的文件。 输入 只可能是1,2,3三个整数之一,其输出分别对应输出中的Task1Task2,Task3。 输出 如果dict.dic文件内容如下: (文件每行都有换行符,且前边无空格)     abcdefghijklmnopqrstuvwxyz     ABCDEFGHIJKLMNOPQRSTUVWXYZ     ~!@#$%^&*()_+`1234567890- =\][';/.,<>?":{}| 则三个任务的输出分别如下: (注意:Task1、2、3等也需要输出) Task1: capital: 26 lowercase: 26 digit: 10 others: 36 Task2: line: 3 43 characters in max line. 26 characters in min line. Task3: CAPITAL: A:1 B:1 C:1 D:1 E:1 F:1 G:1 H:1 I:1 J:1 K:1 L:1 M:1 N:1 O:1 P:1 Q:1 R:1 S:1 T:1 U:1 V:1 W:1 X:1 Y:1 Z:1 LOWERCASE: a:1 b:1 c:1 d:1 e:1 f:1 g:1 h:1 i:1 j:1 k:1 l:1 m:1 n:1 o:1 p:1 q:1 r:1 s:1 t:1 u:1 v:1 w:1 x:1 y:1 z:1 样例输入 Copy 1 样例输出 Copy Task1: capital: 26 lowercase: 26 digit: 10 others: 36
05-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值