我熟悉Python生成器,但是我只是遇到了“生成方法”这个术语,我不熟悉它并且找不到令人满意的定义。
为了把它放在上下文中,我在SQLAlchemy的叙述文档中找到了这个术语:
使用Connection,Engine,Executable上提供的生成Connection.execution_options()方法,使用“autocommit”标志可以完全控制“自动提交”行为,该标志将打开或关闭所选范围的自动提交。< / p>
什么是生成方法?试图迭代Connection.execution_options()
返回的对象不起作用,所以我认为它不是标准生成器。
答案 0 :(得分:30)
它似乎不是一个常见的数据库概念,但SQLAlchemy使用术语 generative ,意思是“程序在运行时迭代生成”。 (所以,没有与python生成器的连接)。来自the tutorial:
的示例
Query
对象完全生成,意味着大多数方法调用 返回一个新的Query
对象,可以在其上添加更多标准。 例如,要查询名为“ed”的用户,其全名为“Ed” Jones“,你可以两次调用filter()
,使用AND加入标准:
>>> for user in session.query(User).\
... filter(User.name=='ed').\
... filter(User.fullname=='Ed Jones'):
... print user
这种调用语法通常称为“方法链接”,以及允许它作为"fluent interface"的设计。
因此,在Connection.execution_options()
的情况下,“生成”意味着它返回修改后的连接对象,以便您可以如上所述链接调用。
答案 1 :(得分:4)
查看Connection.execution_options(lib / sqlalchemy / engine / base.py)的源代码,所有方法都是为连接添加选项。
这个想法是这些选择会影响未来的行为。查询。
举个例子:
result = connection.execution_options(stream_results=True).\
execute(stmt)
此处,仅在此查询的连接中间更改了行为。 在某种程度上,它“生成”或克隆自身作为行为略有不同的对象。
在这里,您还可以将自动提交设置为True。实施例
# obtain a connection
connection = ...
# do some stuff
# for the next section we want autocommit on
autocommitting_connection = connection.execution_options(autocommit=True)
autocommitting_connection.execute(some_insert)
result = autocommitting_connection.execute(some_query)
# done with this section. Continue using connection (no autocommit)
这就是文档的该部分的含义。 “生成方法”是指返回您可以继续使用的同一实例的修改副本的方法。这适用于Connection,Engine,Executable类。
答案 2 :(得分:3)
您必须参考该项目的特定文档或源代码才能确保,但我猜它会返回一个适合于参数定义的需求/行为的某个对象的修改版本。
该方法返回此
Connection
的副本,该副本引用相同的内容 底层DBAPI连接,但也定义了给定的执行 选项将对execute()
的调用生效。
答案 3 :(得分:0)
正如@zzzeek在上面评论的那样,现在在SQLAlchemy glossary中记录了这一点。
generative表示:
SQLAlchemy用来引用通常称为方法链的术语;请参阅该术语了解详情。
一种面向对象的技术,通过调用对象上的方法来构造对象的状态。该对象具有任意数量的方法,每个方法都返回一个新对象(或在某些情况下为同一对象),并在对象中添加了附加状态。