sqlalchemy 的显式 ORM 访问方式


对于sqlalchemy,可以利用一种显式的ORM方式进行访问,这种方式无需依赖声明层,而是显式地进行操作。还有一种访问方式为声明层 ORM 访问方式。

主要的建立步骤包括:

1. 设置DSN连接网址;

2. 创建引擎,利用引擎对DSN进行连接;

3. 创建元数据实例,并绑定到引擎;

4. 创建表类,并与元数据进行绑定;

5. 进行数据库操作。

基本连接关系图:

完整代码

 1 from sqlalchemy import create_engine, MetaData
 2 from sqlalchemy.ext.declarative import declarative_base
 3 from sqlalchemy.sql.schema import Table, Column
 4 from sqlalchemy.sql.sqltypes import Integer, VARCHAR
 5 from sqlalchemy.orm import sessionmaker
 6
 7 # No need to create declarative_base
 8 # Base = declarative_base()
 9
10 # Set DSN
11 dsn = 'mysql+mysqldb://root:root@localhost/test_db'
12
13 # Create engine, get connection
14 eng = create_engine(dsn)
15 cnx = eng.connect()
16
17 # No need to create session
18 # Session = sessionmaker(bind=eng)
19 # session = Session()
20
21 # Generate metadata instance
22 metadata = MetaData()
23 # Bind engine to metadata
24 metadata.bind = eng
25
26 # Build up Table
27 test_tb = Table('test_tb', metadata,
28                 Column('id', Integer),
29                 Column('name', VARCHAR(8))
30                 )
31 #print(type(test_tb.insert()))
32 # Insert value, .rowcount will return the row number affected
33 print(test_tb.insert().execute(id=6, name='Momo').rowcount)
34 # Delete value, note: '.c' attr should be added
35 print(test_tb.delete(test_tb.c.id==6).execute().rowcount)
36
37 print(test_tb.insert().execute([{'id': 7, 'name': 'Momo'}, {'id': 8, 'name': 'Kitkat'}]).rowcount)
38 # Update value, change value where id is 7 to 9
39 print(test_tb.update(test_tb.c.id==7).execute(id=9).rowcount)
40
41 print(test_tb.delete(test_tb.c.id==8).execute().rowcount)
42 print(test_tb.delete(test_tb.c.id==9).execute().rowcount)
43
44 cnx.close()

View Code

分段分析

首先导入所需的模块,由于不需要声明层,此处进行注释

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 访问方式

2. ORM 与 sqlalchemy 模块

转载于:https://www.cnblogs.com/stacklike/p/8192999.html

Python与数据库[2] - 关系对象映射/ORM[4] - sqlalchemy 的显式 ORM 访问方式相关推荐

  1. Python与数据库[2] - 关系对象映射/ORM[1] - sqlalchemy 的基本使用示例

    sqlalchemy 的基本使用示例 下面的例子中将利用sqlalchemy进行数据库的连接,通过orm方式利用类实例属性操作的方式对数据库进行相应操作,同时应用一些常用的函数. 完整代码如下: 1 ...

  2. ORM 关系对象映射 基础知识点

    优点:1.ORM使我们通用的数据库变得更加的简单便捷.2.可避免新手程序员写sql语句带来的性能问题. 1. 创建单表2. 创建关键表 1). 一对一2). 一对多3). 多对多 创建表的语句: py ...

  3. python mysql数据库的高级应用_Python之路第十二天,高级(5)-Python操作Mysql,SqlAlchemy...

    Mysql基础 一.安装 Windows: 1.下载 http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.31-winx64.zip 2.解压 ...

  4. 当 Python 遇到数据库,这个模块就变得超级好用

    大家好,今天我和大家来聊一下SQLALchemy这个模块,该模块是Python当中最有名的ORM框架,该框架是建立在数据库API之上,使用关系对象映射进行数据库的操作,简而言之便是:将对象转换成SQL ...

  5. Python与数据库

    数据库和Python 持久化存储 在任何应用中,都需要持久化存储,一般有三种基础的存储机制,文件,数据库系统,以及一些混合类型,一种是使用普通文件或者python特定文件进行访问,另一种是使用数据库管 ...

  6. PHP 设计模式 笔记与总结(9)数据对象映射模式

    [数据对象映射模式] 是将对象和数据存储映射起来,对一个对象的操作会映射为对数据存储的操作.例如在代码中 new 一个对象,使用数据对象映射模式就可以将对象的一些操作比如设置一些属性,就会自动保存到数 ...

  7. python字典是可迭代对象么_Python 迭代器与可迭代对象,看不懂你找我

    公众号:pythonislover Python大数据与SQL优化笔记 首先我们要知道Python迭代器与可迭代对象不是一个概念. 迭代器:是访问数据集合内元素的一种方式,一般用来遍历数据,但是他不能 ...

  8. DAY11-MYSQL之ORM框架SQLAlchemy

    一 介绍 SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取 ...

  9. sqlalchemy exists 子查询_学好ORM框架SQLAlchemy面试必问

    首先我们先来了解一下SQLAlchemy SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然 ...

最新文章

  1. vim插件的安装方式 -- vim注释插件和doxygen函数注释生成插件-ctrlp插件-tabular等号对齐 插件...
  2. JavaWeb学习笔记①——Java向下转型在JavaEE中运用——登陆验证
  3. [C++] STACK_Principle
  4. Vxworks增加system call
  5. 伪代码就是计算机语言 正确吗,伪代码实例绍.ppt
  6. 新手编程:程序员 5 种编程入门方法,快速学会一门编程语言!
  7. iOS开发 Linker command fail with exit code 1(use -v to see invocation)
  8. 【WC2013】糖果公园
  9. oracle bpm 教学视频,Oracle BPM 官方文件摘录
  10. layabox 学习笔记
  11. 第二人生的源码分析(三十)UDP接收数据和Windows网络关闭
  12. Android API19 设置Alarm闹钟
  13. Ghost过程中出现GHOSTERR.TXT文件的解决方法
  14. [bzoj4372]烁烁的游戏
  15. 利用主成分PCA进行特征提取
  16. TextBoxes与TextBoxes++算法详解
  17. OSI TCP/IP
  18. 脑蛋白和计算机意义,冬眠蝙蝠的脑蛋白质组与肝蛋白质组研究
  19. Layui-颜色选择器
  20. 与servere.exe的战斗历程

热门文章

  1. Python、TensorFlow、机器学习、深度学习四件套(附免费下载)
  2. 面部识别数据研究:43年,100个数据集
  3. 【机器学习】机器学习从零到掌握之十三 -- 教你理解Logistics回归之梯度上升算法
  4. TensorFlow实现Attention机制
  5. 河南科技大学计算机系宿舍,河南科技大学宿舍条件怎么样—河南科技大学宿舍图片...
  6. php checkstyle,php codebrowser未正确遵循checkstyle.xml中的路径
  7. k8s边缘节点_KubeEdge v0.2发布,全球首个K8S原生的边缘计算平台开放云端代码
  8. mqtt c语言 单片机,MQTT--单片机实现即时通讯
  9. H3C认证无线互联网络专家
  10. MS17-010 “永恒之蓝“ 修复方案