数据库

数据库是操作系统之上文件操作的一种抽象,包括持久性的创建、读取、更新、删除数据。

为什么数据必须?

在web应用中存储数据和将数据呈现给用户需要一种有效方式。比如Google存储路况数据,并告诉用户从一个地点到另一地的驾驶数据。当数据被结构化存储时,驾驶导航并能被呈现。

数据库有效、快速的制作结构化的存储。它们同时给你一个框架,告诉你数据应该怎样存储和获取,而无需每次创建一个新的应用时考虑如何处理数据。

数据库的实现有很多种方式,包括PostgreSQLMySQL 和 SQLite。非关系型数据库称为NoSQL data stores

关系型数据库

Python web开发里最常用的数据存储时关系表。替代的数据存储抽象将在NoSQL介绍。

关系型数据库通过一系列表格存储数据。表格之间的联系称为外键foreign keys。外键是一个一个表格的一行到另一个表格的一行的唯一对应。

数据库的复杂度区别很大。SQLite,被包含在Python内,为每个数据库的所有数据创建单个文件。其他数据库比如PostgreSQLMySQL,Oracle 和Microsoft SQL Server有更复杂的数据持久方式,提供更先进的特性,非常适合web应用开发。这些特性包括但不限于:

  1. 数据重复在一个主数据库和一个或多个只读附属实例里
  2. 高级的列类型能更有效的存储半结构化的数据比如JSON
  3. 分表,允许多个数据库水平方向的缩放,每隔服务器作为读写实例
  4. 提供数据库运行时的监控,统计及其他有用信息

通常来说,web应用从一个单一的数据库比如PostgreSQL开始,随着发展数据库变得复杂,迁移到高级特性比如复制、分表、监控,以满足应用需求。

Python Web应用的常用数据库

PostgreSQL 和 MySQL 是两个最常用的Python Web应用开源数据库。

SQLite 把数据库的所有信息存在单个文件里,Python自带安装,适合一次单个连接。生产环境不适合用SQLite

PostgreSQL

PostgreSQL适合Python web应用。它的特性集,活跃开发和稳定特质,被数以百万集web应用作为后台数据库。

MySQL

MySQL是另一个适合Python Web应用的开源数据库。MySQL有一个相对简单的初始学习曲线,但是特性不如其丰富。

Python连接数据库

要在Python里连接数据库,你需要使用代码库。最常用的关系型数据库代码库有:

SQLite从Python 2.7起就是自带数据库,不需要额外库。简单的”import sqlite3″就能连接该数据库。

对象关系映射Object-relational Mapping

对象关系映射Object-relational mappers (ORMs)允许开发者通过Python代码访问数据库,而无需写SQL语句。每一个web应用框架都采用不同的方式处理ORM。可以读一下此文an entire page on object-relational mapping

第三方数据库服务

很多公司运营数据库托管服务,包括自动备份、恢复、安全加强、容量伸缩。

  • Amazon Relational Database Service (RDS) provides pre-configured MySQL and PostgreSQL instances. The instances can be scaled to larger or smaller configurations based on storage and performance needs.
  • Google Cloud SQL is a service with managed, backed up, replicated, and auto-patched MySQL instances. Cloud SQL integrates with Google App Engine but can be used independently as well.
  • BitCan provides both MySQL and MongoDB hosted databases with extensive backup services.
  • ElephantSQL is a software-as-a-service company that hosts PostgreSQL databases and handles the server configuration, backups and data connections on top of Amazon Web Services instances.

常用数据库资源

  • How does a relational database work? is a detailed longform post on the sorting, searching, merging and other operations we often take for granted when using an established relational database such as PostgreSQL.
  • Why I Love Databases is a great read on the CAP Theorem, distributed systems and other topics that are at the core of database theory and implementation. Well worth the time to read.
  • Writing better SQL is a short code styling guide to make your queries easier to read.
  • DB-Engines ranks the most popular database management systems.
  • DB Weekly is a weekly roundup of general database articles and resources.
  • Databases integration testing strategies covers a difficult topic that comes up on every real world project.
  • Asynchronous Python and Databases is an in-depth article covering why many Python database drivers cannot be used without modification due to the differences in blocking versus asychronous event models. Definitely worth a read if you are using WebSockets via Tornado or gevent.
  • PostgreSQL vs. MS SQL Server is one perspective on the differences between the two database servers from a data analyst.

数据库学习清单

  1. 假定你使用Ubuntu,安装PostgreSQL数据库,指令是sudo apt-get install postgresql。
  2. 确保psycopg2 库在你的应用依赖里。
  3. 配置你的web服务器,让它连接到PostgreSQL 实例。
  4. 为你的模型创建ORM,通过Django的内置built-in ORM 或 SQLAlchemy with Flask
  5. 创建你的数据库表,或如果你是用ORM,用ORM模型同步PostgreSQL 实例。
  6. 开始从你的web应用创建,读取,更改,删除数据。

数据

数据是个极其宽泛的话题,包括下面众多子话题:

  • 数据处理
  • 机器学习
  • 数据分析
  • 可视化
  • 地理信息映射
  • 数据持久:关系数据库和NoSQL数据库
  • 对象关系映射object-relational mappers
  • 自然语言处理NLP
  • 索引、搜索、获取

Python社区已经建立并将继续创建关于上述话题的开源库和教程。

为什么Python是适合处理数据语言?

Python有一个广泛的开源代码库和一个丰富的社区,贡献各种不同背景的内容到这些代码库。

此外,Python数据操作能整合web框架web APIs,对于其他语言来说,可能没那么容易。比如,Ruby创建web应用非常棒,但是它的数据分析和数据可视化库跟Python生态相比就非常有限。

Python如何成为处理数据的流行语言?

Python是一种通用编程语言,能适用于各种领域。在过去几十年里,Python在科学领域和金融领域的受欢迎程度快速增加。Python项目比如pandas来自对冲基金,NumPy 和 SciPy在学术界创建并被开源社区不断改进。

问题是;为什么Python被用于创建这些项目?答案是部分幸运,以及Python逐渐成熟,开源社区逐步增长,并被计算机科学家以外的人广泛接受。语法特点和显式表达让那些非常聪明但是没有编程背景的人能捡起Python并通过相对其他语言少很多的代码完成工作。金融界和科学界的代码被反复共享,全球范围的开源社区不断发展,传播到更广泛的程序员群体里。

毫无疑问Python被广泛接受为各种类型的数据操作,因为是正确的语言、在正确时间、做了正确的事。然而,最终还要归功于来自全世界的科学家和工程师,创造了无数杰出的数据处理代码库。

常用Python数据资源