openstack mysql 表_通过demo学习OpenStack开发所需的基础知识 -- 数据库(1)

本文深入探讨了OpenStack项目中对MySQL数据库的使用,包括选择数据库、ORM(Object-Relational Mapping)的概念,特别是Python中的SQLAlchemy库。文章详细介绍了SQLAlchemy的架构、基本操作如连接数据库、定义数据模型以及执行CRUD操作,强调了session对象在事务处理中的重要性。同时,提到了OpenStack项目中的数据库选择,如在单元测试中使用sqlite,以及未来可能转向PyMySQL以支持Python3和异步操作。
摘要由CSDN通过智能技术生成

OpenStack中的关系型数据库应用

OpenStack中的数据库应用主要是关系型数据库,主要使用的是MySQL数据库。当然也有一些NoSQL的应用,比如Ceilometer项目。就SQL数据库本身的应用而言,OpenStack的项目和其他项目并没有什么区别,也是采用ORM技术对数据进行增删改查而已。

本文的重点是讲解OpenStack项目中对关系型数据库的应用的基础知识,更多的是涉及ORM库的使用。对于数据库的安装和配置,需要读者自己查找一下MySQL的教程,如果只是为了验证ORM的相关知识,也可以使用sqlite数据库。

数据库的选择

OpenStack官方推荐的保存生产数据的是MySQL数据库,在devstack项目(这个项目用于快速搭建OpenStack开发环境)中也是安装了MySQL数据库。不过,因为OpenStack的项目中没有使用特定的只有在MySQL上才能用的功能,而且所采用的ORM库SQLAlchemy也支持多种数据库,所以理论上选择PostgreSQL之类的数据库来替代MySQL也是可行的。

另外,OpenStack项目在单元测试中使用的是sqlite的内存数据库,这样开发者运行单元测试的时候不需要安装和配置复杂的MySQL数据库,只要安装好sqlite3就可以了。而且,数据库是保存在内存中的,会提高单元测试的速度。

ORM的选择

什么是ORM

ORM的全称是Object-Relational Mapping,即对象关系映射,是一种利用编程语言的对象来表示关系数据库中的数据的技术,其更形式化的定义可以参考Wiki页面Orject-relational mapping。简单的说,ORM就是把数据库的一张表和编程语言中的一个对象对应起来,这样我们在编程语言中操作一个对象的时候,实际上就是在操作这张表,ORM(一般是一个库)负责把我们对一个对象的操作转换成对数据库的操作。

Python中的ORM实现

一般来说,各种主流语言都有自己的ORM实现,一般来说也不只一种,比较出名的有Java的Hibernate,Ruby on Rails的ORM,C++的ODB等。在Python中也存在多种ORM的实现,最著名的两种是Django的Model层的ORM实现,以及SQLAlchemy库。这两种ORM实现基本上是Python中ORM的事实上的标准,如果你写Django应用,那么你就用Django自带的实现;不然,你就可以选择SQLAlchemy库。

OpenStack基本上都是Python项目,所以在OpenStack中,ORM主要是使用了SQLAlchemy库(Keystone, Nova, Neutron等);不过使用了Django的Horizon项目(面板)还是使用了Django自带的ORM实现。本文主要是讲解OpenStack中如何使用SQLAlchemy库,这个也是开发OpenStack项目的最基本知识。

SQLAlchemy

SQLAlchemy简介

SQLAlchemy项目是Python中最著名的ORM实现,不仅在Python项目中也得到了广泛的应用,而且对其他语言的ORM有很大的影响。OpenStack一开始选择这个库,也是看中了它足够稳定、足够强大的特点。

SQLAlchemy项目的官网是http://www.sqlalchemy.org/,目前该项目最新的版本是1.0.11,1.0系列是今年刚发的,0.9系列应该还是应用最广泛的版本。对于一般的应用来说,0.9系列和1.0系列差别不大。

关于SQLAlchemy的学习

我个人觉得SQLAlchemy的学习难度会比Django的Model层难一些,因为一个最简单的例子也会有一些不太直观的地方,对于没用过的人来说,会比较难以理解。不过SQLAlchemy官网整理了一些比较不错的入门教程,是一个比较好的学习起点:Tutorials。另外,官方的Reference其实是一个很好的教程,讲了很多基本的概念,有助于理解SQLAlchemy的库的使用。Reference的地址是:http://docs.sqlalchemy.org/en/rel_1_0/,还可以直接下载PDF版本。我个人建议大家直接阅读Reference即可,阅读顺序就按照PDF文件的章节编排顺序进行。虽然这个文档很长,但是我最后发现这么做是最节约时间的。

SQLAlchemy的架构

先让我们来看一下SQLAlchemy这个库的总体架构,如下图(图来自官网)所示:

9ff9b5100c5035f9363bc91f8e0c76ce.png

SQLAlchemy这个库分为两层&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值