前一篇文章里,已经完成了基本框架的搭建。
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 圆满完成。