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 Base = declarative_base() # Set DSN
dsn = 'mysql+mysqldb://root:root@localhost/test_db' # Create engine, get connection
eng = create_engine(dsn)
cnx = eng.connect() # Make a Session class binded with engine
Session = sessionmaker(bind=eng)
# Generate a session instance
session = Session() # Build up Table class
class Test_tb(Base):
__table__ = Table('test_tb', Base.metadata,
Column('id', Integer, primary_key=True),
Column('name', VARCHAR(8))
) # Insert value
# session.add_all([Test_tb(id=6, name='Momo')])
session.add(Test_tb(id=6, name='Momo'))
session.commit() # Delete value
session.query(Test_tb).filter(Test_tb.id==6).delete()
session.commit() session.add_all([Test_tb(id=7, name='Momo'), Test_tb(id=8, name='Kitkat')])
session.commit()
# Update value
fr = session.query(Test_tb).filter_by(id=7).all()
for f in fr:
f.id = 9
session.query(Test_tb).filter(Test_tb.id==8).delete()
session.query(Test_tb).filter(Test_tb.id==9).delete()
session.commit() re = session.query(Test_tb).all()
# Show value: Each r is a row in table
for r in re:
print(r.__dict__) 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 Base = declarative_base() # Set DSN
dsn = 'mysql+mysqldb://root:root@localhost/test_db'

创建引擎,以及会话实例

 # Create engine, get connection
eng = create_engine(dsn)
cnx = eng.connect() # Make a Session class binded with engine
Session = sessionmaker(bind=eng)
# Generate a session instance
session = Session()

基于声明层创建表格类

 # Build up Table class
class Test_tb(Base):
__table__ = Table('test_tb', Base.metadata,
Column('id', Integer, primary_key=True),
Column('name', VARCHAR(8))
)

最后利用会话实例对表格进行操作

 # Insert value
# session.add_all([Test_tb(id=6, name='Momo')])
session.add(Test_tb(id=6, name='Momo'))
session.commit() # Delete value
session.query(Test_tb).filter(Test_tb.id==6).delete()
session.commit() session.add_all([Test_tb(id=7, name='Momo'), Test_tb(id=8, name='Kitkat')])
session.commit()
# Update value
fr = session.query(Test_tb).filter_by(id=7).all()
for f in fr:
f.id = 9
session.query(Test_tb).filter(Test_tb.id==8).delete()
session.query(Test_tb).filter(Test_tb.id==9).delete()
session.commit() re = session.query(Test_tb).all()
# Show value: Each r is a row in table
for r in re:
print(r.__dict__) cnx.close()

最终运行结果

{'_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x000000000489F320>, 'id': 3, 'name': 'eric'}
{'_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x000000000489F390>, 'id': 5, 'name': 'mock'}

相关阅读


1. 显式的 ORM 访问方式

2. ORM 与 sqlalchemy 模块

3. 建立声明层表对象的两种方式

Python与数据库[2] -> 关系对象映射/ORM[3] -> sqlalchemy 的声明层 ORM 访问方式的更多相关文章

  1. Python与数据库[2] -> 关系对象映射/ORM[5] -> 利用 sqlalchemy 实现关系表查询功能

    利用 sqlalchemy 实现关系表查询功能 下面的例子将完成一个通过关系表进行查询的功能,示例中的数据表均在MySQL中建立,建立过程可以使用 SQL 命令或编写 Python 适配器完成. 示例 ...

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

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

  3. Python与数据库[2] -> 关系对象映射/ORM[0] -> ORM 与 sqlalchemy 模块

    ORM 与 sqlalchemy 1 关于ORM / About ORM 1.1 ORM定义 / Definition of ORM ORM(Object Relational Mapping),即对 ...

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

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

  5. Python与数据库[2] -> 关系对象映射/ORM[2] -> 建立声明层表对象的两种方式

    建立声明层表对象的两种方式 在对表对象进行建立的时候,通常有两种方式可以完成,以下是两种方式的建立过程对比 首先导入需要的模块,获取一个声明层 from sqlalchemy.sql.schema i ...

  6. 一:ORM关系对象映射(Object Relational Mapping,简称ORM)

    狼来的日子里! 奋发博取 10)django-ORM(创建,字段类型,字段参数) 一:ORM关系对象映射(Object Relational Mapping,简称ORM) ORM分两种: DB fir ...

  7. django关系对象映射(Object Relational Mapping,简称ORM)

    Model 创建数据库,设计表结构和字段 django中遵循 Code Frist 的原则,即:根据代码中定义的类来自动生成数据库表 from django.db import models clas ...

  8. 关系/对象映射 多对多关系(@ManyToMany 注释)【重新认识】

    old: @ManyToMany 注释:表示此类是多对多关系的一边, mappedBy 属性定义了此类为双向关系的维护端, 注意:mappedBy 属性的值为此关系的另一端的属性名. 例如,在Stud ...

  9. Python与数据库 sqlalchemy 建立声明层表对象的两种方式

    在对表对象进行建立的时候,通常有两种方式可以完成,以下是两种方式的建立过程对比 首先导入需要的模块,获取一个声明层 1 from sqlalchemy.sql.schema import Table, ...

随机推荐

  1. 剑指Offer - 九度1362 - 左旋转字符串(Move!Move!!Move!!!)

    剑指Offer - 九度1362 - 左旋转字符串(Move!Move!!Move!!!)2013-11-23 03:05 题目描述: 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任 ...

  2. Python全栈工程师(装饰器、模块)

    ParisGabriel                每天坚持手写  一天一篇  决定坚持几年 全栈工程师     Python人工智能从入门到精通 装饰器 decorators(专业提高篇) 装饰 ...

  3. 孤荷凌寒自学python第六十五天学习mongoDB的基本操作并进行简单封装4

    孤荷凌寒自学python第六十五天学习mongoDB的基本操作并进行简单封装4 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第十一天. 今天继续学习mongoDB的简单操作 ...

  4. GDI+实现双缓冲绘图方法一

    private void Form5_MouseMove(object sender, MouseEventArgs e) { int intOX = rectDrawArea.X; int intO ...

  5. 后端model传入前端JSP页面中的值判断后再取值

    所遇到的问题后端model传入前端JSP页面中的值通过foreach循环内要满足条件才能取值给Div中,我们知道jsp页面中可以直接用EL表达式取值,格式就是${"model中传来的数据&q ...

  6. Tensorflow 载入数据的三种方式

    Tensorflow 数据读取有三种方式: Preloaded data: 预加载数据 Feeding: Python产生数据,再把数据喂给后端. Reading from file: 从文件中直接读 ...

  7. select下拉框右对齐,去掉箭头,替换箭头

    右对齐 select{ width:auto; direction: rtl; } select option { direction: ltr; } 去掉箭头(不设置背景色会有灰色背景) selec ...

  8. Git基本用法简介

    一.           git和svn的主要区别 git是一个分布式的版本控制工具,而svn是一个集中式版本控制工具. 二.           git工具安装 首先下载git:https://gi ...

  9. 7月15号day7总结

    今天复习了springMVC的框架搭建. 思维导图:

  10. java 复习整理(四 String类详解)

    String 类详解   StringBuilder与StringBuffer的功能基本相同,不同之处在于StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此效率上S ...