实践记录
170216
已经周四了,要尽快开始学习和编程任务。谷歌"SQLite"但是文档太多,而且和语言无关,试一下搜索了"python SQLite"找到Python文档。文档的基本案例比较简单,实验成功,开始思考下一步需要理解的内容:
- SQL语言基础(增删改查)
- 如何从数据库取值、传值
- 梳理作业需要实现的逻辑
SQL
谷歌SQL之后的结果如下,挑选一些看一下。由于w3schools总是打不开,找了中文的材料,简单看了SQL语法,基本结构是:select XXX from XXX where XXX的三段式结构。最好的办法还是继续在Python的SQLite中实践。
数据库连接过程
回到Python程序中,导入模块后首先要建立和数据库的连接,并且这时候把数据库创建完成。然后通过另一个对象的示例化,调用方法来操作数据库。
170217
开始尝试设计作业需要的数据库结构和需要的数据实例,查看了心知天气的数据结构,尝试先读一个数据过来,放到数据库里。数据库的设计初步是这样的:
UUID | 日期 | 时间 | 城市 | 天气状况 |
---|---|---|---|---|
wy00001 | 20170102 | 北京 | 雪 |
- 关于UUID的讨论:When are you truly forced to use UUID as part of the design?
- How to insert a unique ID into each SQLite row?
- Python : How to insert a dictionary to a sqlite database?
- Insert Values from dictionary into sqlite database
- 如何获取实时时间:How to get current time in Python
把数据录入数据库
尝试手写一条数据,是可以顺利录入数据库的
从API读取数据写入数据库
尝试把API数据写入数据库,首先要生成一条数据,把生成的数据插入进去,同时还要生成一个随机码或者顺序码。 先完成了把数据读入的过程。
170218
DB-API 2.0 interface for SQLite databases SQLite date storage and conversion SQLite Date & Time 数据类型的说明
SQLite
重新看了SQLite的官方文档和tutorial教程,分清楚了SQLite和Python的SQLite3模块的关系。SQLite是一种关系型数据库,可以利用SQL进行增删改查的一系列操作,但是也有一些自己的特性,比如说动态分配字段类型等,自己的字段类型也是有限的,需要根据SQLite的特点编写SQL进行相关操作。 SQLite3是Python的一个模块,内置了SQLite数据库,所以在新建连接的时候会自动生成db文件,通过一系列的函数执行SQL操作来操作SQLite数据库。 SQLiteStudio Mac版是一个可视化的工具,用于查看SQLite的数据结构字段等内容。SQLitetutorial提供了示例数据库,并且提供了各种语句可以用来执行示例数据库。
尝试SQL
下面根据现有的代码和数据库尝试进行调整
- 增加一列用于自动增加序号
- 谷歌"how to add unique number in sqlite by python"->得到How to insert a unique ID into each SQLite row?其中的官方文档SQLite Autoincrement
给出了一个实例
实测有效。CREATE TABLE test1(a INT, b TEXT); INSERT INTO test1(rowid, a, b) VALUES(123, 5, 'hello');
在过程中总是觉得很别扭,每一次执行都需要写python的函数execute取结果就更搞笑了,需要execute再fetchone。终于找到了Command Line Shell For SQLite,之前用sqlite失败,应该是sqlite3。sqlite不仅仅是一种数据库,还有自带的基于SQL拓展了自己的脚本语言,可以执行增删改查额外的操作,如果这些学会了,在python的模块中直接执行即可。
170219
准备直接进入最后的作业程序开发,简单看了大家的作业,绝大部分都是直接上手SQLAlchemy完成的作业。挣扎了一下,决定还是按部就班,先完成利用SQLite3的基础作业,再继续研究,因为自己想试一下,看看这两者的差异到底有多大。
作业逻辑
加入数据库操作之后,整个后台逻辑会发生变化,需要先梳理清楚操作逻辑再动手,这里有大变化的主要是查询和更正,逻辑如下:
- 查询:输入城市名称后首先根据时间和城市判断该数据是否在数据库中,如果是相同城市在5分钟之内查询过,直接返回查询数据,如果不符合上述条件,再调用API进行数据查询。
- 更正:首先查询要更正的城市是否在5分钟内查询过,如果有,根据更正的数据修改数据库表,如果没有,先调用API查询到结果,写入数据库之后,再执行更正操作。如果提供的更正信息不符合要求,则返回错误提示。