[SQLAlchemy] synchronize_session参数详解

synchronize_session用于query在进行delete or update操作时,对session的同步策略。

  • False - 不对session进行同步,直接进行delete or update操作。
  • ‘fetch‘

   在delete or update操作之前,先发一条sql到数据库获取符合条件的记录。

 1 def _do_pre_synchronize(self):
 2         query = self.query
 3         session = query.session
 4         context = query._compile_context()
 5         select_stmt = context.statement.with_only_columns(
 6             self.primary_table.primary_key)
 7         self.matched_rows = session.execute(
 8             select_stmt,
 9             mapper=self.mapper,
10             params=query._params).fetchall()
  在delete or update操作之后,将session的identity_map与前一步获取到的记录进行match,符合条件的就从session中删掉或更新。
 1 def _do_post_synchronize(self):
 2         session = self.query.session
 3         target_mapper = self.query._mapper_zero()
 4         for primary_key in self.matched_rows:
 5             # TODO: inline this and call remove_newly_deleted
 6             # once
 7             identity_key = target_mapper.identity_key_from_primary_key(
 8                 list(primary_key))
 9             if identity_key in session.identity_map:
10                 session._remove_newly_deleted(
11                     [attributes.instance_state(
12                         session.identity_map[identity_key]
13                     )]
14                 )
  • ‘evaluate‘

   在delete or update操作之前,用query中的条件直接对session的identity_map中的objects进行eval操作,将符合条件的记录下来。

 1 def _do_pre_synchronize(self):
 2         query = self.query
 3         target_cls = query._mapper_zero().class_
 4
 5         try:
 6             evaluator_compiler = evaluator.EvaluatorCompiler(target_cls)
 7             if query.whereclause is not None:
 8                 eval_condition = evaluator_compiler.process(
 9                     query.whereclause)
10             else:
11                 def eval_condition(obj):
12                     return True
13
14             self._additional_evaluators(evaluator_compiler)
15
16         except evaluator.UnevaluatableError:
17             raise sa_exc.InvalidRequestError(
18                 "Could not evaluate current criteria in Python. "
19                 "Specify ‘fetch‘ or False for the "
20                 "synchronize_session parameter.")
21
22         # TODO: detect when the where clause is a trivial primary key match
23         self.matched_objects = [
24             obj for (cls, pk), obj in
25             query.session.identity_map.items()
26             if issubclass(cls, target_cls) and
27             eval_condition(obj)]

   在delete or update操作之后,将符合条件的记录删除或更新。

1 def _do_post_synchronize(self):
2         self.query.session._remove_newly_deleted(
3             [attributes.instance_state(obj)
4              for obj in self.matched_objects])
时间: 2024-11-05 14:28:21

[SQLAlchemy] synchronize_session参数详解的相关文章

jquery ajax 方法及各参数详解

jquery ajax 方法及各参数详解 1.$.ajax() 只有一个参数:参数 key/value 对象,包含各配置及回调函数信息. 参数列表: 参数名 类型 描述 url String (默认: 当前页地址) 发送请求的地址. type String (默认: "GET") 请求方式 ("POST" 或 "GET"), 默认为 "GET".注意:其它 HTTP 请求方法,如 PUT 和 DELETE 也可以使用,但仅部分

Nginx内置变量以及日志格式变量参数详解

Nginx内置变量以及日志格式变量参数详解 $args #请求中的参数值 $query_string #同 $args $arg_NAME #GET请求中NAME的值 $is_args #如果请求中有参数,值为"?",否则为空字符串 $uri #请求中的当前URI(不带请求参数,参数位于$args),可以不同于浏览器传递的$request_uri的值,它可以通过内部重定向,或者使用index指令进行修改,$uri不包含主机名,如"/foo/bar.html". $d

MySQL配置文件mysql.ini参数详解、MySQL性能优化

MySQL配置文件mysql.ini参数详解.MySQL性能优化 my.ini(Linux系统下是my.cnf),当mysql服务器启动时它会读取这个文件,设置相关的运行环境参数. my.ini分为两块:Client Section和Server Section.   Client Section用来配置MySQL客户端参数.   要查看配置参数可以用下面的命令: show variables like '%innodb%'; # 查看innodb相关配置参数 show status like

JQuery中$.ajax()方法参数详解

url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. type: 要求为String类型的参数,请求方式(post或get)默认为get.注意其他http请求方法,例如put和 delete也可以使用,但仅部分浏览器支持. timeout: 要求为Number类型的参数,设置请求超时时间(毫秒).此设置将覆盖$.ajaxSetup()方法的全局设 置. async:要求为Boolean类型的参数,默认设置为true,所有请求均为异步请求. 如果需要发送同步请求,请将此选项

day01_linux中与Oracle有关的内核参数详解

linux中与Oracle有关的内核参数详解 在安装Oracle的时候需要调整linux的内核参数,但是各参数代表什么含义呢,下面做详细解析. Linux安装文档中给出的最小值: fs.aio-max-nr = 1048576 fs.file-max = 6815744 kernel.shmall = 2097152 kernel.shmmax = 4294967295 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 net.ipv4.ip

SWFTOOLS PDF2SWF 参数详解

转载至:http://blog.csdn.net/iamduoluo/article/details/6820329 SWFTools提供了一系列将各种文件转成swf的工具: font2swf.exe gif2swf.exe jpeg2swf.exe pdf2swf.exe png2swf.exe wav2swf.exe 具体的功能就顾名思义了. 其中把pdf转成swf的工具就是pdf2swf了.在命令行中运行pdf2swf src.pdf des.swf一般能满足需求.而命令行参数可以通过pd

httpUrlConnection的参数详解

post方式的的请求过程: // 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在 // http正文内,因此需要设为true, 默认情况下是false; httpUrlConnection.setDoOutput(true); // 设置是否从httpUrlConnection读入,默认情况下是true; httpUrlConnection.setDoInput(true); // Post 请求不能使用缓存 httpUrlConnection.setUse

PHP CURL参数详解

PHP CURL参数详解 curl用法:cookie及post一.cookie用法 <?php $cookie_jar = tempnam('./tmp','cookie'); // login $c=curl_init('http://login_url?username=... curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); curl_setopt($c, CURLOPT_COOKIEJAR, $cookie_jar); curl_exec($c); 

6.跟我学solr---请求参数详解

简介 前面我们在讲SolrRequestHandler和QueryResponseWriter的时候提到过两个参数'qt'和'wt",这两个参数是分别用于选择对应的SolrRequestHandler和QueryResponseWriter的.solr定义了很多类似的参数,它们都分别属于某个大类中,例如"qt"和"wt"就属于CoreQueryParameters.下面罗列一下solr的所有参数列表,来源于solr官网.下面笔者会一一给大家讲解这些参数的作