Python数据库ORM SQLAlchemy 0.7学习笔记(1) 概要

2024-06-02 11:32

本文主要是介绍Python数据库ORM SQLAlchemy 0.7学习笔记(1) 概要,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://wangye.org/blog/archives/718/

! 本文可能 超过1年没有更新,今后内容也许不会被维护或者支持,部分内容可能具有时效性,涉及技术细节或者软件使用方面,本人不保证相应的兼容和可操作性。

最近正好在寻求一种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这么啰嗦的话可以设置为False,这样就看不到这些信息啦。

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数据库ORM SQLAlchemy 0.7学习笔记(1) 概要的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1023843

相关文章

51单片机学习记录———定时器

文章目录 前言一、定时器介绍二、STC89C52定时器资源三、定时器框图四、定时器模式五、定时器相关寄存器六、定时器练习 前言 一个学习嵌入式的小白~ 有问题评论区或私信指出~ 提示:以下是本篇文章正文内容,下面案例可供参考 一、定时器介绍 定时器介绍:51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成。 定时器作用: 1.用于计数系统,可

问题:第一次世界大战的起止时间是 #其他#学习方法#微信

问题:第一次世界大战的起止时间是 A.1913 ~1918 年 B.1913 ~1918 年 C.1914 ~1918 年 D.1914 ~1919 年 参考答案如图所示

[word] word设置上标快捷键 #学习方法#其他#媒体

word设置上标快捷键 办公中,少不了使用word,这个是大家必备的软件,今天给大家分享word设置上标快捷键,希望在办公中能帮到您! 1、添加上标 在录入一些公式,或者是化学产品时,需要添加上标内容,按下快捷键Ctrl+shift++就能将需要的内容设置为上标符号。 word设置上标快捷键的方法就是以上内容了,需要的小伙伴都可以试一试呢!

Tolua使用笔记(上)

目录   1.准备工作 2.运行例子 01.HelloWorld:在C#中,创建和销毁Lua虚拟机 和 简单调用。 02.ScriptsFromFile:在C#中,对一个lua文件的执行调用 03.CallLuaFunction:在C#中,对lua函数的操作 04.AccessingLuaVariables:在C#中,对lua变量的操作 05.LuaCoroutine:在Lua中,

AssetBundle学习笔记

AssetBundle是unity自定义的资源格式,通过调用引擎的资源打包接口对资源进行打包成.assetbundle格式的资源包。本文介绍了AssetBundle的生成,使用,加载,卸载以及Unity资源更新的一个基本步骤。 目录 1.定义: 2.AssetBundle的生成: 1)设置AssetBundle包的属性——通过编辑器界面 补充:分组策略 2)调用引擎接口API

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

大学湖北中医药大学法医学试题及答案,分享几个实用搜题和学习工具 #微信#学习方法#职场发展

今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式,可以快速查找问题解析,加深对题目答案的理解。 1.快练题 这是一个网站 找题的网站海量题库,在线搜题,快速刷题~为您提供百万优质题库,直接搜索题库名称,支持多种刷题模式:顺序练习、语音听题、本地搜题、顺序阅读、模拟考试、组卷考试、赶快下载吧! 2.彩虹搜题 这是个老公众号了 支持手写输入,截图搜题,详细步骤,解题必备

《offer来了》第二章学习笔记

1.集合 Java四种集合:List、Queue、Set和Map 1.1.List:可重复 有序的Collection ArrayList: 基于数组实现,增删慢,查询快,线程不安全 Vector: 基于数组实现,增删慢,查询快,线程安全 LinkedList: 基于双向链实现,增删快,查询慢,线程不安全 1.2.Queue:队列 ArrayBlockingQueue:

Python 字符串占位

在Python中,可以使用字符串的格式化方法来实现字符串的占位。常见的方法有百分号操作符 % 以及 str.format() 方法 百分号操作符 % name = "张三"age = 20message = "我叫%s,今年%d岁。" % (name, age)print(message) # 我叫张三,今年20岁。 str.format() 方法 name = "张三"age

关于如何更好管理好数据库的一点思考

本文尝试从数据库设计理论、ER图简介、性能优化、避免过度设计及权限管理方面进行思考阐述。 一、数据库范式 以下通过详细的示例说明数据库范式的概念,将逐步规范化一个例子,逐级说明每个范式的要求和变换过程。 示例:学生课程登记系统 初始表格如下: 学生ID学生姓名课程ID课程名称教师教师办公室1张三101数学王老师101室2李四102英语李老师102室3王五101数学王老师101室4赵六103物理陈