当前位置: 首页 > SEO学院SEO知识

Python ORM框架SQLAlchemy学习笔记之映射 类使用实例和

来源:未知 浏览量:154次

1. 创建映射类的实例(Instance)

前面介绍了如何将数据库实体表映射到Python类上下面我们可以创建这个类的一个实例(Instance)我们还是以前一篇文章的User类为例网站跳出率高我们还是以前一篇文章的User类为例让我们创建User对象:
代码如下:
ed_user = User(‘ed’, ‘Ed Jones’, ‘edspassword’)
ed_user.name
‘ed’
ed_user.password
‘edspassword’
str(ed_user.id)
‘None’
和普通的Python类一样实例化大家可能会问为什么ed_user.id会是None值首先id这个属性没有通过__init__()构造方法初始化所以默认会因为先前定义的ORM的id列(Column)而产生一个None值在默认情况下ORM会为所有被映射的表列创建类属性这些属性是通过Python语言中描述符(Descriptors)机制来实现的。所以这些属性的使用会包含一些额外的行为包括跟踪修改或者当需要时自动从数据库加载新的数据也就是说我们在使用这些属性时包括修改或者读取都会触发ORM内部的一系列动作。


等等写好锚文本的技巧都会触发ORM内部的一系列动作。


等等你还没有说明白为什么id这个属性会为None值呢。呵呵写好锚文本的技巧你还没有说明白为什么id这个属性会为None值呢。呵呵其实我们现在并没有将数据插入数据库一般主键这个属性会在插入数据库时自动产生一个不重复的值以保证唯一性。由于我们没有对对象实行持久化(Persist) (所谓的持久化就是把对象数据按照映射关系存储入数据库里) 所以这里id值为None。别着急稍后当我们介绍将数据持久化后你就可以看到一个新的自动产生的id了。

接下来小偷懒一下介绍一个偷懒的技巧:-)

假如我们不定义映射类的构造方法__init__()会带来什么不良影响吗?完全不会SQLAlchemy为我们考虑到这点假如我们偷懒将先前的User类定义成这样:
代码如下:
class User(Base):
__tablename__ = ‘users’
id = Column(Integer, primary_key=True)
name = Column(String)
fullname = Column(String)
password = Column(String)
由于User继承自Base (Base定义见上一篇文章)所以受到Declarative系统的管理Declarative系统发现这个类缺少构造方法于是很友善的给我们补上了一个构造方法当然其提供的构造方法则不能像我们自己定义的构造方法那样使用基于位置的参数访问建议使用基于键的参数访问方式包括我们所有用Column定义映射的列比如如下方式:
代码如下:
u1 = User(name=’ed’, fullname=’Ed Jones’, password=’foobar’)
id也可以传入写好锚文本的技巧比如如下方式:
代码如下:
u1 = User(name=’ed’, fullname=’Ed Jones’, password=’foobar’)
id也可以传入通常意义上这类主键由系统自动维护我们无需为其赋值。

2. 创建并使用会话(Session)

到这里可谓是“万事俱备只欠东风了”用官方文档的话说“我们现在已经准备好和数据库‘交谈’了” (We’re now ready to start talking to the database)。ORM的操作句柄(Handle)被称为会话(Session)。为了使用会话我们需要先配置它配置Session的代码语句应该和create_engine()创建引擎的代码语句在一个代码级别上(放在一起就行了)。

比如我们利用create_engine()先建立起引擎名字为engine(关于引擎的建立代码可以参考我第一篇文章)然后利用sessionmaker()工厂函数建立起Session类同时绑定我们现有的引擎比如代码如下:
代码如下:
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)
假如我们创建Session的代码与创建引擎的代码不在一个级别上呢比如先sessionmaker()一个Session类然后才用create_engine()创建了引擎那么我们还有机会将Session和引擎绑定到一起吗?当然可以我们可以利用Session类的configure方法来配置引擎绑定比如这样的:
代码如下:
Session = sessionmaker()
# engine = create_engine(…) 创建引擎
Session.configure(bind=engine) # 到这里engine应该已经创建
到这里通过sessionmaker()工厂创造出的Session类应该绑定了我们先前创建的Engine了但是会话还没有真正开始要开始会话我们需要实例化这个Session类:
代码如下:
session = Session()
到这里session就获取了由Engine维护的数据库连接池并且会维持内存中的映射数据直到提交(commit)更改或者关闭会话对象。

到这里会话的建立就讲解完了接下来会讲解真正的ORM数据库查询部分欢迎关注!


转载请注明:seo-网站优化-网站建设 » Python ORM框架SQLAlchemy学习笔记之映射类使用实例和

展开全部内容