ORM
Object Relational Mapper 代表了一种设计原则,讲数据库映射为一个 session 工作单元,将表也定义为响应的类,并把对应的表和session 相关联
这种方法可以减少 数据 DAL data assess layer 层的重复书写,并且使用类构建对应的sql查询简化工作量
链接
from sqlalchemy import create_engine
# 建立一个直接链接
engine = create_engine('addr', echo=True)
一般我们不会这么直接使用
addr
标明数据库
mapping
from sqlalchemy.ext.declarative import declarative_base
# 提供的基础映射
Base = declarative_base()
from sqlalchemy import Column, Integer, String
class User(Base):
__tablename__ = 'users' # 标明是那个表
# 表对象
id = Column(Integer, primary_key=True)
name = Column(String)
fullname = Column(String)
nickname = Column(String)
def __repr__(self):
return "<User(name='%s', fullname='%s', nickname='%s')>" % (
self.name, self.fullname, self.nickname)
创建一个 schema
上面 USER 创建了一个我们的 table 类,我们称为表元数据 metadata
我们可以通过 User.__table__
查看这一信息,
Table对象是一个更大的集合的成员,称为MetaData。使用Declarative时,可以使用.metadata 声明性基类的属性来使用此对象。
由于实际上不存在这一个表,我们可以使用CREATE 创建这个表,如下
Base.metadata.create_all(engine)
创建一个 table 表的实例
就是一行? 但是没有插入道数据库里面,这里没有设置的值会设置默认值,当然插入的
创建session
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)
Session.configure(bind=engine) 设置
session = Session() 实例
这里我们Session只是关联了一个session,并没有打开任何链接,当我们第一次使用的时候会自动从engine维护的连接池种检索链接,并保留他,知道我们提交所有更改或者关闭回话
见
https://docs.sqlalchemy.org/en/13/orm/session_basics.html#session-faq-whentocreate
添加& 更新对象
。。 TBD