Python ORM框架SQLAlchemy学习笔记之安装和简单查询实例


Posted in Python onJune 10, 2014

最近正好在寻求一种Python的数据库ORM (Object Relational Mapper),SQLAlchemy (项目主页)这个开源项目进入了我的视线,本来想尝试着使用Django的ORM模块的,无奈Django的模块联系比较紧密,没能单独分拆下来,一定程度上说明Django自成体系的生态系统在给我们带来快速便捷的开发环境的同时牺牲了组装的灵活性。

初次学习,也没实质感觉到SQLAlchemy的好处,不过看其介绍的很多大公司均采用该项目,而且其支持的数据库还是蛮丰富的,所以我觉得花点时间研究还是值得的。不过令人遗憾的是关于SQLAlchemy的中文资料比较少,所以对于我们这种英语不佳的带来了一定的麻烦。

研究一个项目最好的办法就是阅读其官方提供的说明文档,当然很轻松就找到了SQLAlchemy的文档 (0.7)。文档的格式和大多数项目一样,有下载安装说明,有示例,有快速上手教程。不过我还是习惯下载个PDF慢慢研究。

下面就将我近期的阅读学习做个笔记,当然这个仅供参考,里面可能有自己的一些猜测和想法,不作权威依据,不当之处还希望指出。

1. 安装SQLAlchemy

安装部分不打算详细介绍,可以通过easy_install或者pip进行安装,命令如下:

easy_install SQLAlchemy
# 或者
pip install SQLAlchemy

当然我使用的是Windows环境,所以倾向于使用setup.py安装,下载压缩包,解压,然后命令提示符下切换到该目录,再运行下面的命令:
python setup.py install

这里需要注意的是默认安装会编译安装C扩展,这些C扩展将直接编译为二进制本机代码然后为SQLAlchemy处理数据集加速,这个是很不错的功能,遗憾的是Windows下提示编译安装扩展失败,当然这不影响SQLAlchemy的使用,只是作为性能上的优化,本机开发环境可以不需要这些扩展,如果不需要可以尝试下面的命令:
pip install --global-option='--without-cextensions' SQLAlchemy
# 或者setup.py方式
python setup.py --without-cextensions install

好了,到这里安装部分我就简单介绍完了,如果对这部分感兴趣的话可以移步文档。

最后可以检验一下安装成果:

>>> import sqlalchemy
>>> sqlalchemy.__version__ 
0.7.0

2. 简单的查询

就像任何新语言都是从万能的'Hello World'开始一样,先简单体验一把SQLAlchemy,由于SQLAlchemy是管理数据库的,所以我们需要一个数据库,自从用了Python以后,一提到数据库,拿来做实验的首当其冲的就是Python自带的SQLite3,这次我们连SQLite的数据库文件都不需要指定了,直接创建一份基于内存的数据库,也就是说数据文件存放在内存中,便于我们下面的测试。

我们使用create_engine创建数据库连接引擎:

>>> from sqlalchemy import create_engine
>>> engine = create_engine('sqlite:///:memory:', echo=True)

create_engine的第一个参数'sqlite:///:memory:'我们知道是建立数据库连接的,那第二个参数echo=True是做什么的呢,其实如果echo=True那么SQLAlchemy将会通过Python标准模块logging来输出日志,如果你在操作交互式命令控制台,一些信息将会被输出,这里我们可能会看到SQLAlchemy生成的一些SQL语句,这个对于我们学习和调试是很有必要的,所以在这里我们将其设置为True,否则,如果不愿意SQLAlchemy这么??碌幕翱梢陨柚梦?alse,这样就看不到这些信息啦。

create_engine()将会返回一个Engine引擎实例(instance),其代表着SQLAlchemy对于数据库的核心接口,其隐藏了各种数据库方言(dialect)的细节,实际上SQLAlchemy的底层是Python的DBAPI。

需要注意的是此时并没有实质上与数据库建立连接,什么时候才会与数据库真正建立连接呢?这个只会在你第一次查询数据库的时候发生。呃…这个有点像Lazy Loading (懒惰加载,延迟加载),也就是说我们需要真正操作数据库的时候才真正建立连接。SQLAlchemy很多地方用到了Lazyload,以后会有机会和大家介绍的。

接下来我们来执行第一条SQL语句,同时建立数据库连接:

>>> engine.execute("select 1").scalar()
1

好了,当engine.execute执行时,Engine终于建立起实质上数据库连接了。

Engine对于数据库连接的管理采取的是数据库连接池 (Pool),当连接第一次建立,SQLAlchemy将会将建立的连接放入内部的连接池中以便于随后的数据操作语句执行时复用。

当然关于Engine的用法并不是SQLAlchemy精彩的ORM部分,随后我们会介绍将Engine绑定到ORM,然后使用对象来操作数据库部分。

Python 相关文章推荐
python基础教程之五种数据类型详解
Jan 12 Python
python 脚本生成随机 字母 + 数字密码功能
May 26 Python
python实现猜单词小游戏
May 22 Python
Python爬虫之正则表达式基本用法实例分析
Aug 08 Python
在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例
Jan 29 Python
react+django清除浏览器缓存的几种方法小结
Jul 17 Python
python3.6中@property装饰器的使用方法示例
Aug 17 Python
手写一个python迭代器过程详解
Aug 27 Python
Jupyter notebook 启动闪退问题的解决
Apr 13 Python
Python网络爬虫四大选择器用法原理总结
Jun 01 Python
Python2及Python3如何实现兼容切换
Sep 01 Python
python 读取yaml文件的两种方法(在unittest中使用)
Dec 01 Python
Python使用htpasswd实现基本认证授权的例子
Jun 10 #Python
python网络编程学习笔记(10):webpy框架
Jun 09 #Python
python网络编程学习笔记(九):数据库客户端 DB-API
Jun 09 #Python
python网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
Jun 09 #Python
python网络编程学习笔记(七):HTML和XHTML解析(HTMLParser、BeautifulSoup)
Jun 09 #Python
python网络编程学习笔记(六):Web客户端访问
Jun 09 #Python
python网络编程学习笔记(五):socket的一些补充
Jun 09 #Python
You might like
优化NFR之一 --MSSQL Hello Buffer Overflow
2006/10/09 PHP
php中通过正则表达式下载内容中的远程图片的函数代码
2012/01/10 PHP
Hutia 的 JS 代码集
2006/10/24 Javascript
JavaScript RegExp方法获取地址栏参数(面向对象)
2009/03/10 Javascript
33个优秀的jQuery 教程分享(幻灯片、动画菜单)
2011/07/08 Javascript
AngularJS表单编辑提交功能实例
2015/02/13 Javascript
JS实现的5级联动Select下拉选择框实例
2015/08/17 Javascript
如何解决IONIC页面底部被遮住无法向上滚动问题
2016/09/06 Javascript
详解Node.js 命令行程序开发教程
2017/06/07 Javascript
深入理解React中何时使用箭头函数
2017/08/23 Javascript
微信小程序实现下拉刷新和轮播图效果
2017/11/21 Javascript
浅谈vue的几种绑定变量的值 防止其改变的方法
2018/03/01 Javascript
JS使用遮罩实现点击某区域以外时弹窗的弹出与关闭功能示例
2018/07/31 Javascript
JS+HTML实现的圆形可点击区域示例【3种方法】
2018/08/01 Javascript
详解在vue-cli项目下简单使用mockjs模拟数据
2018/10/19 Javascript
详解Vue源码学习之双向绑定
2019/04/10 Javascript
浅谈v-for 和 v-if 并用时筛选条件方法
2019/11/07 Javascript
[01:57]2016完美“圣”典风云人物:国士无双专访
2016/12/04 DOTA
[02:10]探秘浦东源深体育馆 DOTA2 Supermajor不见不散
2018/05/17 DOTA
利用Python演示数型数据结构的教程
2015/04/03 Python
Django中实现点击图片链接强制直接下载的方法
2015/05/14 Python
用Python实现大文本文件切割的方法
2019/01/12 Python
pyqt5 获取显示器的分辨率的方法
2019/06/18 Python
python调用动态链接库的基本过程详解
2019/06/19 Python
pyqt5数据库使用详细教程(打包解决方案)
2020/03/25 Python
深入了解Python装饰器的高级用法
2020/08/13 Python
FORZIERI澳大利亚站:全球顶级奢华配饰精品店
2016/12/31 全球购物
新加坡领先的时尚生活方式零售品牌:CHARLES & KEITH
2018/01/16 全球购物
财务会计应届生求职信
2013/11/24 职场文书
小学爱国卫生月活动总结
2014/06/30 职场文书
员工拾金不昧表扬稿
2015/05/05 职场文书
上课讲话检讨书范文
2015/05/07 职场文书
银行反洗钱宣传活动总结
2015/05/08 职场文书
企业团队精神心得体会
2016/01/19 职场文书
详解Mysql数据库平滑扩容解决高并发和大数据量问题
2022/05/25 MySQL
Python中tqdm的使用和例子
2022/09/23 Python