UnfinishPython

背景: 自动驾驶验证过程需要使用大量的数据,而验证的工具需要根据其针对的功能Feature进行有效的数据筛选,这就需要借助一套数据管理系统实现上述的想法。

一般情况下,使用Python编写程序与脚本是实现开发、验证自动化最简单、高效的途径,因此基于Python进行有效的数据管理就是自动驾驶验证平台比较重要的基石。

这篇笔记主要从数据管理的实现上,学习基于SQLAlchemy的数据管理脚本编写。

我们编写的数据处理的程序,大部分情况下需要保存数据,加载数据等操作。
我们可以采用普通的文本文件进行数据的保存与加载,比如 CSV, JSON, XML或者你自定义的格式,虽然是保存数据给程序使用,但一般情况下上述这些文本文件的可读性还算比较可以。
下面我们举个实例说明一下

1. 使用文本文件存储数据

为了便于阅读,文本文件通常情况下会按照某种格式进行数据的存储。
例如,CSV文件是以逗号作为分隔符,一行文本代表一行数据,数据之间则通过逗号进行分隔。

  1. first_name,last_name,title,publisher
  2. Isaac,Asimov,Foundation,Random House
  3. Pearl,Buck,The Good Earth,Random House
  4. Pearl,Buck,The Good Earth,Simon & Schuster

上面的例子就是一个简单的CSV文件示例,第一行是header,剩余行则体现为具体的数据。

1.1 文本文件存储的优势

  • 文本文件存储最直接的优点就是其易于实现,可读性高。例如:基于Excel就可以按照表格视图查看数据并导出为CSV文件。
  • 如果想要分享数据,文本文件很简单,且没有其他依赖,仅需要拷贝文件即可。
  • 编程工具的支持性,例如CSV文件的处理,Python提供了内置的csv库去处理CSV文件(当然,pandas更强大)

1.2 文本文件存储的劣势

随着存储的数据的增加,文本文件存储的弊端就会逐渐暴露。

  • 大文件种进行数据的检索,修改会十分困难。
  • 如果要分享数据,则需要提前将复杂的数据结构一并告知,要使用这些数据,首先需要理解整个数据结构。

2. SQLite

SQLite数据库提供了关系型数据管理系统(Relational Database Management System)。

2.1 创建数据库结构

关系型数据库提供了一种再表中存储结构化数据,并再这些表之间建立关系的方法,通常可以使用结构化查询语言(SQL)作为与数据交互的主要方式。SQLite数据库支持使用SQL与数据表交互。

SQL是一种声明语言,用于创建、管理和查询数据库种包含的数据,其描述了要完成什么工作,而无需知道如何完成。

从概念上将,数据以二维表结构存储在数据库种,每个表由行组成记录,并且每个记录由列组成。
表中的每个记录都有一个主键定义给记录一个唯一的标识符。

Reference: https://realpython.com/python-sqlite-sqlalchemy/#using-flask-with-python-sqlite-and-sqlalchemy