• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >python > Python ORM框架SQLAlchemy学习笔记之关系映射实例

Python ORM框架SQLAlchemy学习笔记之关系映射实例

作者: 字体:[增加 减小] 来源:互联网

通过本文主要向大家介绍了Python ORM框架SQLAlchemy学习笔记之关系映射实例等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

昨天简单介绍了SQLAlchemy的使用,但是没有能够涉及其最精彩的ORM部分,今天我将简单说明一下,当然主要还是讲解官方文档的内容,由于是学习笔记,有可能存在精简或者自己理解的部分,不做权威依据。

当我们开始使用ORM,一种可配置的结构可以用于描述我们的数据库表,稍后我们定义的类将会被映射到这些表上。当然现代的SQLAlchemy(新版本SQLAlchemy,原文是modern SQLAlchemy)使用Declarative把这两件事一起做了,即允许我们把创建类和描述定义数据库表以及它们之间的映射关系一次搞定。

这段话是什么意思呢?简单来说吧,SQLAlchemy分为Classic (经典模式)和Modern (现代模式),Classic定义数据库表的模式比较传统,需要先描述这个表。

1. Classic 映射

比如以官方文档中的例子,我们拥有表结构如下:

下面我们描述这张表:

这就是传统的定义ORM的方法,有关这个方法的更多信息,可以阅读文档Mapper Configuration,以后有机会再和大家详谈。

2. Modern 映射

当大家都乐此不疲的定义描述表,定义类,再映射来实现ORM的时候,SQLAlchemy团队搞出了更简单的映射方法,那就是Modern模式了,即通过定义映射类来一次性完成所有任务。

为了定义的类能够被SQLAlchemy管理,所以引入了Declarative这个概念,也就是说我们所有的类必须是Declarative基类的子类,而这个基类可以通过下面的办法来获取:

现在通过刚才的代码我们得到了名为Base的基类,通过这个基类我们可以定义N多的映射子类,而这些子类都能被SQLAlchemy Declarative系统管理到。

下面我们还是看刚才的那个users表的例子:

这样User类就建立起与数据库表的映射,真实表的名字可以使用__tablename__指明,然后是表列的集合,包括id、name、fullname以及password,当然想必大家已经知道了,我们通过primary_key=True已经指明id为主键了。当然一些数据库表可能不包含有主键(例如视图View,当然视图也可以被映射),ORM为了能够实际映射表需要至少一个列被定义为主键列。多列,比如复合多主键也能够被很好地映射支持。

大家可能注意到User类中还包含有通常意义上的Python魔术方法,包含__init__()初始化类(构造方法)以及__repr__()字符串化支持方法,当然这些都是可选的,如果需要这个类可以加入程序所需要的任意多方法或者属性,你只要把这个类看作一个普通的Python类就可以了。

当然User类唯一不能马虎的就是必须继承至Base,这个Base就是刚才我们通过declarative_base()生成的类,通过它我们可以接下来让SQLAlchemy Declarative系统管理并操作这些映射类和数据库表。

实际上包括继承的Base类,所有的类都应该是Python的新式类(new style class),关于新式类的更多信息可以参考Python手册。

随着我们的User映射类通过Declarative系统构造成功,我们就拥有了相关的定义信息,比如在Classic定义中介绍的Table()描述,也包含映射到表的类,就是User自身,我们可以通过User.__table__来查看我们的表描述情况:

好啦,下面轻松一下,见证奇迹的时刻,我们需不需要定义创建好实体数据库然后再定义ORM?对于SQLAlchemy来说这些都是小事一桩,其都可以给你一手包办,也就是说你可以完全不必理会数据库,交给SQLAlchemy就可以了,比如通过MetaData.create_all()并将engine参数传入即可(什么是engine?参考我的笔记1),比如通过下面的方式创建我们的users表。

您可能想查找下面的文章:

相关文章

  • Python中字典(dict)和列表(list)的排序方法实例
  • 使用python遍历指定城市的一周气温
  • python下函数参数的传递(参数带星号的说明)
  • python文件与目录操作实例详解
  • python计算圆周率pi的方法
  • python实现simhash算法实例
  • 使用go和python递归删除.ds store文件的方法
  • python制作花瓣网美女图片爬虫
  • 简单介绍Python的Django框架的dj-scaffold项目
  • python写xml文件的操作实例

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • python每隔N秒运行指定函数的方法
    • jupyter安装小结
    • python抓取网页图片示例(python爬虫)
    • Django中实现一个高性能计数器(Counter)实例
    • python中执行shell的两种方法总结
    • python使用正则表达式匹配字符串开头并打印示例
    • Python 绘图和可视化详细介绍
    • python 生成目录树及显示文件大小的代码
    • python爬虫入门教程之点点美女图片爬虫代码分享
    • 简单学习Python time模块

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有