sqlalchemy 里的 session 具体有什么作用
发布网友
发布时间:2022-04-26 10:38
我来回答
共3个回答
懂视网
时间:2022-05-02 15:34
(object relational mapping):对象关系映射。
python面向对象,而数据库是关系型。
orm是将数据库关系映射为Python中的对象,不用直接写SQL。
缺点是性能略差。
通过sessionmaker,我们得到一个类,一个能产生session的工厂。
而使用scoped_session的目的,一言以蔽之:为了线程安全。
scoped_session类似单例模式,当我们调用使用的时候,会先在Registry里找找之前是否已经创建session了。
要是有,就把这个session返回。
要是没有,就创建新的session,注册到Registry中以便下次返回给调用者。
scoped_session的实现使用了thread local storage技术,使session实现了线程隔离。
关于ORM,以及Python中SQLAlchemy的scoped_session
标签:nmake obj 对象 直接 thread 单例 ssi 线程安全 创建
热心网友
时间:2022-05-02 12:42
官网有写,不过看的不是很懂。
大致意思是Session用于创建程序与数据库之间的会话,并将这个会话以python的面向对象方式(“holding zone”)进行包装,提供给python其他程序调用。
Session提供一个进行数据库查询(query)的入口,python程序通过Session实例,可以对正在连接的数据库进行查询(查询结果是一个面向对象实例),将修改的内容(一般是修改面向对象实例,然后通过Session将修改的实例与数据库中特定数据“同步”。)
Session中有一个很重要的理念“Identity Map”。Session查询的结果实例,我们修改过的实例,和数据库中的数据是怎么关联起来的呢?就是靠“Identity Map”,每个实例都具有“Identity Map”记录,每个“Identity Map”都和数据行的主键(primary key)一一对应。
(这是我的渣英语翻译+个人理解写的。有不对的地方,欢迎大神指点)
官网内容:
In the most general sense, the Session establishes all conversations with the database and represents a “holding zone” for all the objects which you’ve loaded or associated with it ring its lifespan. It provides the entrypoint to acquire a Query object, which sends queries to the database using the Session object’s current database connection, populating result rows into objects that are then stored in the Session, inside a structure called the Identity Map - a data structure that maintains unique copies of each object, where “unique” means “only one object with a particular primary key”.
官网资料:http://docs.sqlalchemy.org/en/rel_0_9/orm/session_basics.html#what-does-the-session-do
热心网友
时间:2022-05-02 14:00
保持mysql连接不中断的意思、、跟http的会话大概一个意思。