Python与数据库[2] -> 关系对象映射/ORM[4] -> sqlalchemy 的显式 ORM 访问方式
sqlalchemy 的显式 ORM 访问方式
对于sqlalchemy,可以利用一种显式的ORM方式进行访问,这种方式无需依赖声明层,而是显式地进行操作。还有一种访问方式为声明层 ORM 访问方式。
主要的建立步骤包括:
1. 设置DSN连接网址;
2. 创建引擎,利用引擎对DSN进行连接;
3. 创建元数据实例,并绑定到引擎;
4. 创建表类,并与元数据进行绑定;
5. 进行数据库操作。
基本连接关系图:
完整代码
from sqlalchemy import create_engine, MetaData
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.sql.schema import Table, Column
from sqlalchemy.sql.sqltypes import Integer, VARCHAR
from sqlalchemy.orm import sessionmaker # No need to create declarative_base
# Base = declarative_base() # Set DSN
dsn = 'mysql+mysqldb://root:root@localhost/test_db' # Create engine, get connection
eng = create_engine(dsn)
cnx = eng.connect() # No need to create session
# Session = sessionmaker(bind=eng)
# session = Session() # Generate metadata instance
metadata = MetaData()
# Bind engine to metadata
metadata.bind = eng # Build up Table
test_tb = Table('test_tb', metadata,
Column('id', Integer),
Column('name', VARCHAR(8))
)
#print(type(test_tb.insert()))
# Insert value, .rowcount will return the row number affected
print(test_tb.insert().execute(id=6, name='Momo').rowcount)
# Delete value, note: '.c' attr should be added
print(test_tb.delete(test_tb.c.id==6).execute().rowcount) print(test_tb.insert().execute([{'id': 7, 'name': 'Momo'}, {'id': 8, 'name': 'Kitkat'}]).rowcount)
# Update value, change value where id is 7 to 9
print(test_tb.update(test_tb.c.id==7).execute(id=9).rowcount) print(test_tb.delete(test_tb.c.id==8).execute().rowcount)
print(test_tb.delete(test_tb.c.id==9).execute().rowcount) cnx.close()
分段分析
首先导入所需的模块,由于不需要声明层,此处进行注释
from sqlalchemy import create_engine, MetaData
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.sql.schema import Table, Column
from sqlalchemy.sql.sqltypes import Integer, VARCHAR
from sqlalchemy.orm import sessionmaker # No need to create declarative_base
# Base = declarative_base()
设置DSN参数,利用该参数进行引擎实例创建并连接,再创建元数据,与引擎进行绑定,最后建立表格类,与元数据进行绑定。
# Set DSN
dsn = 'mysql+mysqldb://root:root@localhost/test_db' # Create engine, get connection
eng = create_engine(dsn)
cnx = eng.connect() # No need to create session
# Session = sessionmaker(bind=eng)
# session = Session() # Generate metadata instance
metadata = MetaData()
# Bind engine to metadata
metadata.bind = eng # Build up Table
test_tb = Table('test_tb', metadata,
Column('id', Integer),
Column('name', VARCHAR(8))
)
进行基本操作测试,注意此处删除时的条件语句在表格名和列名中间需要加入c表示列属性,最后利用连接实例关闭连接。
#print(type(test_tb.insert()))
# Insert value, .rowcount will return the row number affected
print(test_tb.insert().execute(id=6, name='Momo').rowcount)
# Delete value, note: '.c' attr should be added
print(test_tb.delete(test_tb.c.id==6).execute().rowcount) print(test_tb.insert().execute([{'id': 7, 'name': 'Momo'}, {'id': 8, 'name': 'Kitkat'}]).rowcount)
# Update value, change value where id is 7 to 9
print(test_tb.update(test_tb.c.id==7).execute(id=9).rowcount) print(test_tb.delete(test_tb.c.id==8).execute().rowcount)
print(test_tb.delete(test_tb.c.id==9).execute().rowcount) cnx.close()
相关阅读
1. 声明层 ORM 访问方式
Python与数据库[2] -> 关系对象映射/ORM[4] -> sqlalchemy 的显式 ORM 访问方式的更多相关文章
- Python与数据库[2] -> 关系对象映射/ORM[0] -> ORM 与 sqlalchemy 模块
ORM 与 sqlalchemy 1 关于ORM / About ORM 1.1 ORM定义 / Definition of ORM ORM(Object Relational Mapping),即对 ...
- Python与数据库[2] -> 关系对象映射/ORM[5] -> 利用 sqlalchemy 实现关系表查询功能
利用 sqlalchemy 实现关系表查询功能 下面的例子将完成一个通过关系表进行查询的功能,示例中的数据表均在MySQL中建立,建立过程可以使用 SQL 命令或编写 Python 适配器完成. 示例 ...
- Python与数据库[2] -> 关系对象映射/ORM[1] -> sqlalchemy 的基本使用示例
sqlalchemy 的基本使用示例 下面的例子中将利用sqlalchemy进行数据库的连接,通过orm方式利用类实例属性操作的方式对数据库进行相应操作,同时应用一些常用的函数. 完整代码如下: fr ...
- Python与数据库[2] -> 关系对象映射/ORM[3] -> sqlalchemy 的声明层 ORM 访问方式
sqlalchemy的声明层ORM访问方式 sqlalchemy中可以利用声明层进行表格类的建立,并利用ORM对象进行数据库的操作及访问,另一种方式为显式的 ORM 访问方式. 主要的建立步骤包括: ...
- Python与数据库[2] -> 关系对象映射/ORM[2] -> 建立声明层表对象的两种方式
建立声明层表对象的两种方式 在对表对象进行建立的时候,通常有两种方式可以完成,以下是两种方式的建立过程对比 首先导入需要的模块,获取一个声明层 from sqlalchemy.sql.schema i ...
- 一:ORM关系对象映射(Object Relational Mapping,简称ORM)
狼来的日子里! 奋发博取 10)django-ORM(创建,字段类型,字段参数) 一:ORM关系对象映射(Object Relational Mapping,简称ORM) ORM分两种: DB fir ...
- django关系对象映射(Object Relational Mapping,简称ORM)
Model 创建数据库,设计表结构和字段 django中遵循 Code Frist 的原则,即:根据代码中定义的类来自动生成数据库表 from django.db import models clas ...
- 关系/对象映射 多对多关系(@ManyToMany 注释)【重新认识】
old: @ManyToMany 注释:表示此类是多对多关系的一边, mappedBy 属性定义了此类为双向关系的维护端, 注意:mappedBy 属性的值为此关系的另一端的属性名. 例如,在Stud ...
- ORM 关系对象映射 基础知识点
优点: 1.ORM使我们通用的数据库变得更加的简单便捷. 2.可避免新手程序员写sql语句带来的性能问题. 1. 创建单表 2. 创建关键表 1). 一对一 2). 一对多 3). 多对多 创建表的语 ...
随机推荐
- Jenkins拾遗--第三篇(用户权限管理)
采访过很多实用Jenkins的同学,发现Jenkins的安全是一个很薄弱的地方.很多公司用作生产部署的Jenkins安全管理都不是很规范,就更别提测试用的Jenkins了. 其实Jenkins是一个很 ...
- ICG-智能代码生成器.(权限控制.融入平台).(表单引擎).(最低兼容IE8)
请下拉滚动条... 代码生成器.附带客户端代码 个人平台:www.10086bank.com 界面: 1--首先是server制作界面(BS结构).直接上图: 2--点击提交生成一下文件: 各个代 ...
- 剑指Offer - 九度1521 - 二叉树的镜像
剑指Offer - 九度1521 - 二叉树的镜像2013-11-30 23:32 题目描述: 输入一个二叉树,输出其镜像. 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入 ...
- 《Cracking the Coding Interview》——第17章:普通题——题目8
2014-04-28 23:35 题目:最大子数组和问题. 解法:O(n)解法. 代码: // 17.8 Find the consecutive subarray with maximum sum ...
- windows下Tomcat安装
环境Windows 64位 jdk1.8 1.Tomcat安装 官网地址:http://tomcat.apache.org/download-90.cgi 下载安装包,安装之后进行解压 2.修改htt ...
- 01--是时候让我们谈谈一致性hash了
--------------------- 假如你有图中三个盒子,我们有代号为 1,4,5,12 这四样东西 那根据代号作为主键,将东西放到盒子了,该如何放置? 我们可以对代号取模 1 mod 3 = ...
- winform小知识
1.得到控制台或者winform程序在debug目录下生成的exe路径 建议使用:AppDomain.CurrentDomain.BaseDirectory或者Assembly.GetExecutin ...
- 深入理解net core中的依赖注入、Singleton、Scoped、Transient(四)【转】
原文链接:https://www.cnblogs.com/gdsblog/p/8465401.html 相关文章: 深入理解net core中的依赖注入.Singleton.Scoped.Transi ...
- 孤荷凌寒自学python第十四天python代码的书写规范与条件语句及判断条件式
孤荷凌寒自学python第十四天python代码的书写规范与条件语句及判断条件式 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 在我学习过的所有语言中,对VB系的语言比较喜欢,而对C系和J系 ...
- Opencv3.2.0安装包
这个资源是Opencv3.2.0安装包,包括Windows软件包,Android软件包,IOS软件包,还有opencv的源代码:需要的下载吧. 点击下载