PostgreSQL下的Python
PostgreSQL下的Python
注意 本人的博客都迁移到本人自己搭建的博客地址,通过此处可查看。
PL/Python过程语言允许PostgreSQL函数用Python语言编写。
要在特定数据库中安装PL/Python,请使用CREATE EXTENSION plpythonu
。
提示:如果语言安装到template1中,则随后创建的所有数据库都将自动安装该语言。
PL/Python仅作为"不可信"语言提供,这意味着它不提供限制用户可以在其中执行的任何方式,因此命名为plpythonu。如果在Python中开发安全执行机制,将来可能会有可信变量plpython。在不可信的PL / Python中函数的作者必须注意,该函数不能用于做任何不想要的事情,因为它可以完成登录为数据库管理员的用户所能做的任何事情。 只有超级用户可以使用不受信任的语言(如plpythonu)创建函数。
Python 2 和 Python 3
PL/Python支持Python 2和Python 3语言变量。由于Python 2和Python 3语言变量在某些重要方面不兼容,因此PL / Python使用以下命名和转换方案来避免混淆它们:
- 命名为plpython2u的PostgreSQL语言实现了基于Python 2语言版本的PL/Python。
- 命名为plpython3u的PostgreSQL语言实现了基于Python 3语言版本的PL/Python。
- 命名为plpythonu的语言基于默认的Python语言变体(目前是Python 2)实现了PL/Python。(这个默认值与任何本地Python安装可能认为是它们的"默认"无关,例如,可能是
usr/bin/python
。)根据在Python社区中迁移到Python 3的进度,在PostgreSQL的一个遥远的未来版本中,默认情况下可能会更改为Python 3。
这个方案类似于PEP 394关于python命令的命名和转换的建议。
它取决于构建配置或安装的包是否可用于Python 2或Python 3的PL/Python。
这会导致以下使用和迁移策略:
-
目前还存在很多对Python 3不感兴趣的用使用语言名称plpythonu,并且在可预见的将来不必改变任何内容。建议通过迁移到Python 2.6/2.7逐步"面向未来"的代码,以简化最终迁移到Python 3。
在实践中,许多PL/Python函数将迁移到Python 3而几乎不做任何更改。
-
知道他们拥有严重Python 2相关代码并且不打算改变它的用户可以使用plpython2u语言名称。这将继续运行到很遥远的将来,直到Python 2的支持可能会被PostgreSQL完全抛弃。
-
想要深入Python 3的用户可以使用plpython3u语言名称,该名称将按照今天的标准继续工作。在遥远的将来,当Python 3可能成为默认版本时,他们可能会因美学原因而想要删除"3"。
-
Daredevils希望构建一个仅限于Python 3的操作系统环境,它可以更改pg_pltemplate的内容,使plpythonu等同于plpython3u,同时要记住,这会使得它们的安装与世界上大多数其他地方不兼容。
有关移植到Python 3的更多信息,另请参阅Python 3.0中的新增功能。
在同一个会话中,不允许使用基于Python 2的PL/Python和基于Python 3的PL/Python,因为动态模块中的符号会发生冲突,这可能会导致PostgreSQL服务器进程崩溃。有一个检查可以防止在会话中混合Python主要版本,如果检测到不匹配,这将会中止会话。但是,可以在单独的会话中使用同一数据库中的PL/Python变量。
PL/Python函数
PL/Python中的函数通过标准的CREATE FUNCTION语法声明:
CREATE FUNCTION funcname (argument-list)RETURNS return-type
AS $$# PL/Python function body
$$ LANGUAGE plpythonu;
函数的主体只是一个Python脚本。当函数被调用时,它的参数作为列表参数的元素传递; 命名参数也作为普通变量传递给Python脚本。命名参数的使用通常更具可读性。结果以通常的方式从Python代码返回,返回或yield(在结果集语句的情况下)。如果你没有提供返回值,Python将返回默认的None。PL/Python将Python的None转换为SQL空值。
例如,返回两个整数中较大者的函数可以定义为:
CREATE FUNCTION pymax (a integer, b integer)RETURNS integer
AS $$if a > b:return areturn b
$$ LANGUAGE plpythonu;
作为函数定义主体给出的Python代码被转换为Python函数。例如,上面的结果是:
def __plpython_procedure_pymax_23456():if a > b:return areturn b
假设23456是由PostgreSQL分配给函数的OID。
参数被设置为全局变量。由于Python的范围规则,这具有微妙的后果,即变量不能在函数内重新分配给涉及变量名本身的表达式的值,除非该变量在块中被重新声明为全局变量。例如,以下内容不起作用:
CREATE FUNCTION pystrip(x text)RETURNS text
AS $$x = x.strip() # errorreturn x
$$ LANGUAGE plpythonu;
因为赋值给x使x成为整个块的局部变量,所以赋值右侧的x引用尚未赋值的局部变量x,而不是PL/Python函数参数。使用全局声明,可以使其工作:
CREATE FUNCTION pystrip(x text)RETURNS text
AS $$global xx = x.strip() # ok nowreturn x
$$ LANGUAGE plpythonu;
但最好不要依赖PL/Python的这个实现细节。最好将函数参数视为只读。
数据值
一般来说,PL/Python的目标是提供PostgreSQL和Python世界之间的"自然"映射。 这通知了下面描述的数据映射规则。
数据类型映射
当调用PL/Python函数时,其参数将从其PostgreSQL数据类型转换为相应的Python类型:
- PostgreSQL boolean 转换为Python bool。
- PostgreSQL smallint 和 int 转换为Python int. PostgreSQL bigint 和 oid 转换为 Python 2的long 和Python 3的int。
- PostgreSQL numeric转换为Python Decimal。如果可用,则从cdecimal包中导入此类型。否则,将使用标准库中的decimal.Decimal。cdecimal显着快于decimal。然而,在Python 3.3及更高版本中,cdecimal已经被集成到decimal标准库中,所以不再有任何区别。
- PostgreSQL bytea被转换为Python 2中的Python str和Python 3中的bytes。在Python 2中,该字符串应该被视为没有任何字符编码的字节序列。
- 所有其他数据类型(包括PostgreSQL字符串类型)都被转换为Python str。在Python 2中,这个字符串将在PostgreSQL服务器编码中;在Python 3中,它将是一个像所有字符串一样的Unicode字符串。
- 对于非标量数据类型,请参见下文。
当PL/Python函数返回时,它的返回值被转换为函数声明的PostgreSQL返回数据类型,如下所示:
-
当PostgreSQL返回类型是boolean时,根据Python规则将返回值的真值。也就是说,0和空字符串都是假的,但值得注意的是’f’是真的。
-
当PostgreSQL返回类型是bytea时,返回值将被转换为一个字符串(Python 2)或bytes(Python 3),使用各自的Python内置函数,并将结果转换为bytea。
-
对于所有其他PostgreSQL返回类型,使用Python内置str将返回值转换为字符串,并将结果传递给PostgreSQL数据类型的输入函数。(如果Python值是float,则使用内置的repr而不是str来转换,以避免精度损失。)
Python 2中的字符串在传递给PostgreSQL时需要使用PostgreSQL服务器编码。在当前服务器编码中无效的字符串会引发错误,但并不是所有的编码不匹配都可以被检测到,所以如果没有正确完成,垃圾数据仍然会产生。 Unicode字符串会自动转换为正确的编码,因此可以更安全,更方便地使用这些字符串。在Python 3中,所有字符串都是Unicode字符串。
-
对于非标量数据类型,请参见下文。
NULL,None
如果将一个SQL空值传递给一个函数,那么参数值将在Python中显示为None
。例如,第45.2节所示的pymax函数定义将返回null输入的错误答案。我们可以对函数定义添加STRUCT
,以使PostgreSQL做一些更合理的事情:如果null值被传递,函数将不会被调用,而是会自动返回一个null结果。或者,我们可以检查函数体中的空输入:
CREATE FUNCTION pymax (a integer, b integer)RETURNS integer
AS $$if (a is None) or (b is None):return Noneif a > b:return areturn b
$$ LANGUAGE plpythonu;
如上所示,要从PL/Python函数返回一个SQL空值,返回None值。无论函数是否严格,都可以这样做。
数组和列表
SQL数组值作为Python列表传递到PL/Python中。要从PL/Python函数返回SQL数组值,返回Python列表:
CREATE FUNCTION return_arr()RETURNS int[]
AS $$
return [1, 2, 3, 4, 5]
$$ LANGUAGE plpythonu;SELECT return_arr();return_arr
-------------{1,2,3,4,5}
(1 row)
多维数组作为嵌套的Python列表传递到PL/Python中。例如,二维数组是列表的列表。当从PL/Python函数返回多维SQL数组时,每个级别的内部列表必须都是相同的大小。例如:
CREATE FUNCTION test_type_conversion_array_int4(x int4[]) RETURNS int4[] AS $$
plpy.info(x, type(x))
return x
$$ LANGUAGE plpythonu;SELECT * FROM test_type_conversion_array_int4(ARRAY[[1,2,3],[4,5,6]]);
INFO: ([[1, 2, 3], [4, 5, 6]], <type 'list'>)test_type_conversion_array_int4
---------------------------------{{1,2,3},{4,5,6}}
(1 row)
其他Python序列,如元组,也被接受为向后兼容PostgreSQL版本9.6和以下,当多维数组不受支持时。但是,它们总是被当作一维数组来处理,因为它们与复合类型是不明确的。出于同样的原因,当一个复合类型在多维数组中使用时,它必须由一个元组来表示,而不是一个列表。
请注意,在Python中,字符串是序列,它可能对Python程序员很熟悉:
CREATE FUNCTION return_str_arr()RETURNS varchar[]
AS $$
return "hello"
$$ LANGUAGE plpythonu;SELECT return_str_arr();return_str_arr
----------------{h,e,l,l,o}
(1 row)
复合类型
复合类型的参数被传递给函数作为Python映射。映射的元素名称是复合类型的属性名称。如果传递行的属性具有空值,那么它在映射中没有任何值。这是一个例子:
CREATE TABLE employee (name text,salary integer,age integer
);CREATE FUNCTION overpaid (e employee)RETURNS boolean
AS $$if e["salary"] > 200000:return Trueif (e["age"] < 30) and (e["salary"] > 100000):return Truereturn False
$$ LANGUAGE plpythonu;
从Python函数中返回行或复合类型有多种方法。下面的例子假设我们有:
CREATE TYPE named_value AS (name text,value integer
);
复合结果可以返回为:
序列类型(一个元组或列表,但不是一个集合,因为它不是可索引的)
返回的序列对象必须具有相同数量的项,因为复合结果类型具有字段。索引0的项被分配给复合类型的第一个字段,1的第二个字段,等等。例如:
CREATE FUNCTION make_pair (name text, value integer)RETURNS named_value
AS $$return ( name, value )# or alternatively, as tuple: return [ name, value ]
$$ LANGUAGE plpythonu;
若要返回任何列的SQL null,请在相应位置插入None
。
当返回一个复合类型数组时,它不能作为一个列表返回,因为它是不明确的,是否Python列表表示一个复合类型,或者另一个数组维度。
映射(字典)
从映射中检索每个结果类型列的值,并使用列名称作为键。例子:
CREATE FUNCTION make_pair (name text, value integer)RETURNS named_value
AS $$return { "name": name, "value": value }
$$ LANGUAGE plpythonu;
任何额外的字典键/值对都被忽略。丢失的键被视为错误。若要返回任何列的SQL空值,请插入None
用相应的列名作为键。
对象(任何提供方法__getattr__的对象)
这和映射是一样的。例子:
CREATE FUNCTION make_pair (name text, value integer)RETURNS named_value
AS $$class named_value:def __init__ (self, n, v):self.name = nself.value = vreturn named_value(name, value)# or simplyclass nv: passnv.name = namenv.value = valuereturn nv
$$ LANGUAGE plpythonu;
还支持带有OUT参数的函数。例如:
CREATE FUNCTION multiout_simple(OUT i integer, OUT j integer) AS $$
return (1, 2)
$$ LANGUAGE plpythonu;SELECT * FROM multiout_simple();
设置返回函数
PL/Python函数还可以返回标量或复合类型的集合。有几种方法可以实现这一点,因为返回的对象内部变成了迭代器。下面的例子假设我们有复合类型:
CREATE TYPE greeting AS (how text,who text
);
可以从A返回一个集合结果:
序列类型(元组、列表、集合)
CREATE FUNCTION greet (how text)RETURNS SETOF greeting
AS $$# return tuple containing lists as composite types# all other combinations work alsoreturn ( [ how, "World" ], [ how, "PostgreSQL" ], [ how, "PL/Python" ] )
$$ LANGUAGE plpythonu;
迭代器(任何提供__iter__和next方法的对象)
CREATE FUNCTION greet (how text)RETURNS SETOF greeting
AS $$class producer:def __init__ (self, how, who):self.how = howself.who = whoself.ndx = -1def __iter__ (self):return selfdef next (self):self.ndx += 1if self.ndx == len(self.who):raise StopIterationreturn ( self.how, self.who[self.ndx] )return producer(how, [ "World", "PostgreSQL", "PL/Python" ])
$$ LANGUAGE plpythonu;
Generator (yield)
CREATE FUNCTION greet (how text)RETURNS SETOF greeting
AS $$for who in [ "World", "PostgreSQL", "PL/Python" ]:yield ( how, who )
$$ LANGUAGE plpythonu;
还支持带OUT参数的集返回函数(使用返回的记录集)。例如:
CREATE FUNCTION multiout_simple_setof(n integer, OUT integer, OUT integer) RETURNS SETOF record AS $$
return [(1, 2)] * n
$$ LANGUAGE plpythonu;SELECT * FROM multiout_simple_setof(3);
分享数据
全局字典SD
可以在函数调用之间存储数据。该变量是私有静态数据。全局字典GD
是公共数据,可以在会话中的所有Python函数中使用。小心使用。
每个函数在Python解释器中都有自己的执行环境,因此myfunc
中的全局数据和函数参数不能用于myfunc2
。例外是GD字典中的数据,如上所述。
匿名代码块
PL/Python还支持使用DO语句调用的匿名代码块:
DO $$# PL/Python code
$$ LANGUAGE plpythonu;
一个匿名代码块不会接收任何参数,它返回的任何值都会被丢弃。否则它就像一个函数。
触发函数
当一个函数被用作触发器时,字典TD
包含了触发相关的值:
TD(“event”)
将事件作为字符串包含:插入、更新、删除或截断。
TD(“when”)
包含一个之前,之后,或者不是。
TD(“level”)
包含行或声明。
TD(“new”)
TD(“old”)
对于行级触发器,根据触发器事件,其中一个或两个字段包含相应的触发器行。
TD(“name”)
包含触发器的名称。
TD(“table_name”)
包含触发器所发生的表的名称。
TD(“table_schema”)
包含触发器所发生的表的模式。
TD(“relid”)
包含触发器所发生的表的OID。
TD(“args”)
如果CREATE TRIGGER命令包含了参数,那么它们可以在TD[“args”][0]到TD[“args”][n-1]中得到。
如果TD[“when”]是在之前或者不是,而TD[“level”]是行,那么您可以从Python函数中返回None或"OK",表示行未修改,"跳过"取消事件,或者如果TD[“event”]是插入或更新,您可以返回"MODIFY"来表示您已经修改了新行。否则将忽略返回值。
数据库访问
PL/Python语言模块自动导入名为plpy的Python模块。这个模块中的函数和常量在Python代码中可用作plpy.foo
。
数据库访问函数
plpy
模块提供了几个执行数据库命令的函数:
plpy.execute(query [, max-rows])
调用plpy.execute
使用一个查询字符串和一个可选的行限制参数执行查询,结果将返回到结果对象中。
结果对象模拟一个列表或dictionary对象。结果对象可以通过行号和列名访问。例如:
rv = plpy.execute("SELECT * FROM my_table", 5)
从my_table返回最多5行。如果my_table有一个列my_column,它将被访问如下:
foo = rv[i]["my_column"]
可以使用内置的len
函数获得返回的行数。
结果对象还有这些额外的方法:
nrows()
返回由命令处理的行数。请注意,这并不一定与返回的行数相同。例如,UPDATE命令将设置此值,但不会返回任何行(除非使用返回)。
status()
SPI_execute()
返回值。
colnames()
coltypes()
coltypmods()
返回列表的列名称,列出列类型oid,以及列出类型特定和修饰符的列表。
这些方法在从没有生成结果集的命令中调用result对象时引发异常,例如,不返回或删除表的更新。但是在包含0行的结果集上使用这些方法是可以的。
str()
定义了标准__str__
方法,以便可以使用plpy.debug(rv)
来调试查询执行结果。
结果对象可以被修改。
注意,调用plpy.execute
将导致将整个结果集读入内存。只有在确定结果集相对较小的情况下才使用该函数。如果您不想在获取大的结果时冒过多的内存使用风险,请使用plpy.cursor
而不是plpy.execute
。
plpy.prepare(query [, argtypes])
plpy.execute(plan [, arguments [, max-rows]])
plpy.prepare
准备一个查询的执行计划。如果查询中有参数引用,则使用查询字符串和参数类型列表进行调用。例如:
plan = plpy.prepare("SELECT last_name FROM my_users WHERE first_name = $1", ["text"])
text
是变量的类型,您将传递$1。如果您不想将任何参数传递给查询,则第二个参数是可选的。
在准备语句之后,您将使用函数plpy.execute
来运行:
rv = plpy.execute(plan, ["name"], 5)
将该计划作为第一个参数(而不是查询字符串)传递,并将一个值列表作为第二个参数替换为查询。如果查询不期望任何参数,则第二个参数是可选的。第三个参数是和以前一样的可选行限制。
或者,您可以调用plan对象上的execute方法:
rv = plan.execute(["name"], 5)
查询参数和结果行字段在PostgreSQL和Python数据类型之间转换。
当您使用PL/Python模块准备一个计划时,它会自动保存。请阅读SPI文档()来描述这意味着什么。为了在函数调用中有效地使用这个功能,需要使用一个持久存储字典SD或GD。例如:
CREATE FUNCTION usesavedplan() RETURNS trigger AS $$if "plan" in SD:plan = SD["plan"]else:plan = plpy.prepare("SELECT 1")SD["plan"] = plan# rest of function
$$ LANGUAGE plpythonu;
plpy.cursor(query)
plpy.cursor(plan [, arguments])
plpy.cursor
函数接受与plpy.execute
相同的参数(除了行限制)并返回一个游标对象,它允许以较小的块处理大的结果集。与plpy.execute
,可以使用查询字符串或计划对象,也可以使用参数列表,或者可以将游标函数称为计划对象的方法。
游标对象提供一个获取方法,该方法接受整数参数并返回结果对象。每次调用fetch时,返回的对象将包含下一行,它们不会大于参数值。一旦所有行耗尽,fetch开始返回一个空结果对象。游标对象还提供一个迭代器接口,每次产生一行,直到所有行都耗尽为止。获取的数据不是作为结果对象返回的,而是作为字典,每个字典对应一个结果行。
从大型表中处理数据的两种方法的示例是:
CREATE FUNCTION count_odd_iterator() RETURNS integer AS $$
odd = 0
for row in plpy.cursor("select num from largetable"):if row['num'] % 2:odd += 1
return odd
$$ LANGUAGE plpythonu;CREATE FUNCTION count_odd_fetch(batch_size integer) RETURNS integer AS $$
odd = 0
cursor = plpy.cursor("select num from largetable")
while True:rows = cursor.fetch(batch_size)if not rows:breakfor row in rows:if row['num'] % 2:odd += 1
return odd
$$ LANGUAGE plpythonu;CREATE FUNCTION count_odd_prepared() RETURNS integer AS $$
odd = 0
plan = plpy.prepare("select num from largetable where num % $1 <> 0", ["integer"])
rows = list(plpy.cursor(plan, [2])) # or: = list(plan.cursor([2]))return len(rows)
$$ LANGUAGE plpythonu;
游表被自动处理。但是,如果想要显式地释放游标所持有的所有资源,请使用close方法。一旦关闭,一个游标就不能再被提取了。
提示:
不要混淆由plpy创建的对象。使用Python数据库API规范定义的DB-API游标游标。除了名字以外,他们没有任何共同之处。
捕获错误
访问数据库的函数可能会遇到错误,这将导致它们中止并引发异常。plpy.execute
和plpy.prepare
都可以引发plpy.SPIError
子类的实例,plpy.SPIError
默认情况下将终止该函数。这个错误可以像任何其他Python异常一样,通过使用try/except构造来处理。例如:
CREATE FUNCTION try_adding_joe() RETURNS text AS $$try:plpy.execute("INSERT INTO users(username) VALUES ('joe')")except plpy.SPIError:return "something went wrong"else:return "Joe added"
$$ LANGUAGE plpythonu;
所提出的异常的实际类对应于导致错误的特定条件。参考表PostgreSQL Error Codes列出可能的条件。模块plpy.spiexception
为每个PostgreSQL条件定义了一个异常类,从条件名称派生它们的名称。例如,division_by_zero变成了DivisionByZero, unique_违背变成了独特的效果,fdw_error变成了FdwError,等等。这些异常类都继承自SPIError。这种分离使得处理特定错误变得更容易,例如:
CREATE FUNCTION insert_fraction(numerator int, denominator int) RETURNS text AS $$
from plpy import spiexceptions
try:plan = plpy.prepare("INSERT INTO fractions (frac) VALUES ($1 / $2)", ["int", "int"])plpy.execute(plan, [numerator, denominator])
except spiexceptions.DivisionByZero:return "denominator cannot equal zero"
except spiexceptions.UniqueViolation:return "already have that fraction"
except plpy.SPIError, e:return "other error, SQLSTATE %s" % e.sqlstate
else:return "fraction inserted"
$$ LANGUAGE plpythonu;
请注意,因为所有的异常都来自于plpy.spiexception
模块继承自SPIError
,除子句处理外,它将捕获任何数据库访问错误。
作为处理不同错误条件的另一种方法,可以通过查看异常对象的sqlstate
属性来捕获SPIError异常并确定除块内的特定错误条件。该属性是包含“SQLSTATE”错误代码的字符串值。这种方法提供了大致相同的功能。
显式子事务
从上节所述的数据库访问引起的错误中恢复,可能导致一些操作在其中一个操作失败之前成功,然后从错误中恢复后,数据将处于不一致的状态。PL/Python以显式子事务的形式提供了这个问题的解决方案。
子事务上下文管理器
考虑一个实现两个帐户之间转移的函数:
CREATE FUNCTION transfer_funds() RETURNS void AS $$
try:plpy.execute("UPDATE accounts SET balance = balance - 100 WHERE account_name = 'joe'")plpy.execute("UPDATE accounts SET balance = balance + 100 WHERE account_name = 'mary'")
except plpy.SPIError, e:result = "error transferring funds: %s" % e.args
else:result = "funds transferred correctly"
plan = plpy.prepare("INSERT INTO operations (result) VALUES ($1)", ["text"])
plpy.execute(plan, [result])
$$ LANGUAGE plpythonu;
如果第二个UPDATE
语句导致一个异常被抛出,这个函数将报告错误,但是第一次更新的结果将会被提交。换句话说,这些资金将从乔的账户中撤出,但不会转移到玛丽的账户上。
为了避免这样的问题,你可以包装你的plpy.execute
在显式子事务中的调用。plpy
模块提供了一个helper对象,用于管理通过plpy.subtransaction()
函数创建的显式子事务。由这个函数创建的对象实现了上下文管理器接口。使用显式子事务,我们可以将函数重写为:
CREATE FUNCTION transfer_funds2() RETURNS void AS $$
try:with plpy.subtransaction():plpy.execute("UPDATE accounts SET balance = balance - 100 WHERE account_name = 'joe'")plpy.execute("UPDATE accounts SET balance = balance + 100 WHERE account_name = 'mary'")
except plpy.SPIError, e:result = "error transferring funds: %s" % e.args
else:result = "funds transferred correctly"
plan = plpy.prepare("INSERT INTO operations (result) VALUES ($1)", ["text"])
plpy.execute(plan, [result])
$$ LANGUAGE plpythonu;
注意,仍然需要使用`try/catch,否则,异常将传到Python堆栈的顶部,并导致整个函数以PostgreSQL错误中止,这样操作表就不会插入任何行。子事务上下文管理器不会捕获错误,它只确保在其范围内执行的所有数据库操作将被自动地提交或回滚。子事务块的回滚发生在任何类型的异常退出上,而不仅仅是由数据库访问引起的错误引起的。在显式子事务块中引发的常规Python异常也会导致将子事务回滚。
旧的Python版本
在Python 2.6中默认情况下,使用with
关键字的上下文管理器语法是可用的。如果使用较老的Python版本的PL/Python,仍然可以使用显式子事务,尽管不透明。可以使用enter
和exit
方便别名调用subtransaction manager的__enter__
和__exit__
函数。转移资金的示例函数可以写成:
CREATE FUNCTION transfer_funds_old() RETURNS void AS $$
try:subxact = plpy.subtransaction()subxact.enter()try:plpy.execute("UPDATE accounts SET balance = balance - 100 WHERE account_name = 'joe'")plpy.execute("UPDATE accounts SET balance = balance + 100 WHERE account_name = 'mary'")except:import syssubxact.exit(*sys.exc_info())raiseelse:subxact.exit(None, None, None)
except plpy.SPIError, e:result = "error transferring funds: %s" % e.args
else:result = "funds transferred correctly"plan = plpy.prepare("INSERT INTO operations (result) VALUES ($1)", ["text"])
plpy.execute(plan, [result])
$$ LANGUAGE plpythonu;
实用功能
plpy
模块也提供了如下功能:
- plpy.debug(msg, **kwargs)
- plpy.log(msg, **kwargs)
- plpy.info(msg, **kwargs)
- plpy.notice(msg, **kwargs)
- plpy.warning(msg, **kwargs)
- plpy.error(msg, **kwargs)
- plpy.fatal(msg, **kwargs)
plpy.error
和plpy.fatal
实际上会引发Python异常,如果未捕获,则传到调用查询,导致当前事务或子事务被终止。提高plpy.Error(msg)
和提高plpy.Fatal(msg)
等同于调用plpy.Error(msg)
和plpy.fatal(msg)
,但是raise
不允许传递关键字参数。其他函数只生成不同优先级的消息。是否将特定优先级的消息报告给客户机,写入服务器日志,或两者都由log_min_messages和client_min_messages配置变量控制。
msg
参数作为一个位置参数给出。对于向后兼容性,可以给出多个位置参数。在这种情况下,位置参数元组的字符串表示形式成为向客户机报告的消息。
以下关键字参数被接受:
- detail
- hint
- sqlstate
- schema_name
- table_name
- column_name
- datatype_name
- constraint_name
作为关键字参数传递的对象的字符串表示形式用于丰富向客户机报告的消息。例如:
CREATE FUNCTION raise_custom_exception() RETURNS void AS $$
plpy.error("custom exception message",detail="some info about exception",hint="hint for users")
$$ LANGUAGE plpythonu;=# SELECT raise_custom_exception();
ERROR: plpy.Error: custom exception message
DETAIL: some info about exception
HINT: hint for users
CONTEXT: Traceback (most recent call last):PL/Python function "raise_custom_exception", line 4, in <module>hint="hint for users")
PL/Python function "raise_custom_exception"
另一组实用函数是plpy.quote_literal(string)
、plpy.quote_nullable(string)
和plpy.quote_ident(string)
。它们相当于内置引用函数。它们在构造特别查询时非常有用。一个PL/Python的动态SQL:
plpy.execute("UPDATE tbl SET %s = %s WHERE key = %s" % (plpy.quote_ident(colname),plpy.quote_nullable(newvalue),plpy.quote_literal(keyvalue)))
环境变量
Python解释器接受的一些环境变量也可以用来影响PL/Python行为。它们需要设置在主PostgreSQL服务器进程的环境中,例如在启动脚本中。可用的环境变量取决于Python的版本;有关详细信息,请参阅Python文档。在编写本文时,以下环境变量对PL/Python有影响,假设有足够的Python版本:
- PYTHONHOME
- PYTHONPATH
- PYTHONY2K
- PYTHONOPTIMIZE
- PYTHONDEBUG
- PYTHONVERBOSE
- PYTHONCASEOK
- PYTHONDONTWRITEBYTECODE
- PYTHONIOENCODING
- PYTHONUSERBASE
- PYTHONHASHSEED
(它似乎是一个Python实现的细节,超出了PL/Python的控制,在Python手册页上列出的一些环境变量只在命令行解释器中有效,而不是嵌入的Python解释器。)
注:原文地址
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- LDAP API函数
LDAP API 介绍这篇文档定义了 LDAP API (C语言版)。它使用方便,功能强大,大致内容有以下几个方面:简单浏览LDAP模型应用程序怎样使用API去获取LDAP信息详细介绍API 调用函数举例使用API 及部分样本代码 下面我们分别介绍。简单浏览LDAP模型 LDAP 是以client-s…...
2024/5/2 8:03:25 - 搭建自己的前端自动化测试脚手架(三)
上一篇:搭建自己的前端自动化测试脚手架(二)By LancerComet at 23:47, 2016.07.22. 欢迎转载,转载时还请保留作者署名。这是最后一章了!(・∀・)之前我们配置好了我们的脚手架工具,现在…...
2024/4/20 15:06:14 - SSH框架电子商城-系统技术分析
——————今天距2020年62天——————这是ITester软件测试小栈第71次推文大家好我是coco小锦鲤双十一还有半把个月才到淘宝京东唯品会天猫苏宁当当网都在放大招让我们买买买而一个最可怕的病毒蔓延了主流社交软件双十一全民开喵铺冷静一想如果一个活动能让上亿人痛恨交加其…...
2024/4/21 15:06:17 - Webpack 3.x 在CSS和Template中使用file-loader及解决image-webpack-loader 优化图片问题
如何在CSS或是template中使用图片?在CSS中使用,先安装file-loader: npm i -D file-loader 安装完成后,在package.json中看到的当前版本: "file-loader": "^1.1.5" 接着在app.scss中加入下面的…...
2024/4/21 15:06:17 - 莫琳娜双眼皮开内眼角第三天
...
2024/4/21 15:06:16 - 开眼角合肥省立医院开双眼皮水庆付
...
2024/4/21 15:06:14 - 2021年Node.js开发人员学习路线图
Node.js 自发布以来,已成为业界重要破局者之一。Uber、Medium、PayPal 和沃尔玛等大型企业,纷纷将技术栈转向 Node.js。Node.js 支持开发功能强大的应用,例如实时追踪 App、视频 / 文本聊天引擎、社交媒体 App 等,当前已成为开发人…...
2024/4/21 15:06:14 - 1.学习一下Angularjs的promisee
1.首先来了解一下promisee: 在谈论Promise之前我们要了解一下一些额外的知识;我们知道JavaScript语言的执行环境是“单线程”,所谓单线程,就是一次只能够执行一个任务,如果有多个任务的话就要排队,前面一个…...
2024/4/21 15:06:12 - [转]Building a REST-Backend for Angular with Node.js Express
本文转自:https://malcoded.com/posts/angular-backend-express Angular is a single page application framework. Unfortunately, that does not mean that you dont require a server for certain tasks. After all, your data has to be served from somewhere.…...
2024/4/21 15:06:11 - 双眼皮做什么样美瞳好
...
2024/4/21 15:06:10 - 双眼皮开眼角一起要多久好
...
2024/4/20 15:06:21 - 张如鸿开的双眼皮开眼角后遗症
...
2024/4/29 16:57:12 - 割双眼皮和割眼袋可以一起做吗
...
2024/4/20 15:06:18 - 开眼角好还是双眼皮和开眼角疼吗
...
2024/4/20 15:06:17 - 芭比双眼皮用开刀吗
...
2024/4/21 15:06:09 - 一双一单怎么割深圳美莱开眼角瞒着老公做因为做双眼皮离婚
...
2024/4/21 15:06:08 - 做双眼皮要和医生签协议吗
...
2024/4/21 15:06:08 - angular 中的[ngClass]、[ngStyle]
<div style"text-align:center"><h1>Welcome to {{ title }}!</h1> </div><div [ngClass]"{red: true, blue: false}"> 这是一个 div</div><div [ngClass]"{red: flag, blue: !flag}">这是一个 div &…...
2024/4/21 15:06:06 - angular7 [ngStyle]与[ngClass]的使用
等号右边都为对象 1.ngStyle <!--一个--> <div [ngStyle]"color : 1 > 0 ? red: white">秃然变强</div> <!--多个用逗号隔开--> <div [ngStyle]"color : 1 > 0 ? red: white,background-color : 2 > 3 ? red: white&qu…...
2024/4/20 15:06:25 - 芭比双眼皮可以不开眼角妈
...
2024/4/20 15:06:24
最新文章
- C 认识指针
目录 一、取地址操作符(&) 二、解引用操作符(*) 三、指针变量 1、 指针变量的大小 2、 指针变量类型的意义 2.1 指针的解引用 2.2 指针 - 整数 2.3 调试解决疑惑 认识指针,指针比较害羞内敛,我们…...
2024/5/2 14:20:24 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - 探索进程控制第一弹(进程终止、进程等待)
文章目录 进程创建初识fork函数fork函数返回值fork常规用法fork调用失败的原因 写时拷贝进程终止进程终止是在做什么?进程终止的情况代码跑完,结果正确/不正确代码异常终止 如何终止 进程等待概述进程等待方法wait方法waitpid 进程创建 初识fork函数 在…...
2024/5/1 13:05:31 - MySQL 底层数据结构 聚簇索引以及二级索引 Explain的使用
数据结构 我们知道MySQL的存储引擎Innodb默认底层是使用B树的变种来存储数据的 下面我们来复习一下B树存储 B树存储 哈希存储的区别 哈希存储,只能使用等值查询 B树与B树存储 我们知道B树实际上就是B树的变种 那么为啥使用B树而不是使用B树呢? 我们知道效率的高低主要取决于…...
2024/5/2 2:42:20 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/1 17:30:59 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/4/30 18:14:14 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/29 2:29:43 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/2 9:28:15 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/27 17:58:04 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/27 14:22:49 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/28 1:28:33 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/30 9:43:09 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/27 17:59:30 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/4/25 18:39:16 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/28 1:34:08 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/26 19:03:37 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/29 20:46:55 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/30 22:21:04 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/1 4:32:01 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/27 23:24:42 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/28 5:48:52 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/30 9:42:22 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/2 9:07:46 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/30 9:42:49 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57