Aestate
aestate
opera
DBPool
persistent_db.py
Go to the documentation of this file.
1
from
.
import
__version__
2
from
.steady_db
import
connect
3
4
try
:
5
# 纯python实现的thread lock
6
from
_threading_local
import
local
7
except
ImportError:
8
# 默认版本的thread locak
9
from
threading
import
local
10
11
12
class
PersistentDBError
(Exception):
13
"""General PersistentDB error."""
14
15
16
class
NotSupportedError
(
PersistentDBError
):
17
"""DB-API module not supported by PersistentDB."""
18
19
20
class
PersistentDB
:
21
"""生成基于db-api2的数据库连接池对象
22
"""
23
24
version = __version__
25
26
def
__init__
(
27
self, creator,
28
maxusage=None, setsession=None, failures=None, ping=1,
29
closeable=False, threadlocal=None, *args, **kwargs):
30
"""
31
设置持久性DB-API 2连接生成器。
32
33
创建者:返回新的DB-API 2的任意函数
34
连接对象或符合DB-API 2的数据库模块
35
maxusage:连接池最大数量,0表示无限
36
setsession:可用于准备的SQL命令的可选列表
37
会话,例如[“将日期样式设置为...”,“将时区设置为...”]
38
失败:可选的异常类或异常类的元组
39
为此,应应用连接故障转移机制,
40
如果默认值(OperationalError,InternalError)不足够
41
ping:确定何时应使用ping()检查连接
42
(0 =无=永不,1 =默认=每当被请求时,
43
2 =创建游标时,4 =执行查询时,
44
7 =始终,以及这些值的所有其他位组合)
45
closeable:设置为True将允许被关闭
46
threadlocal:线程独立
47
"""
48
try
:
49
threadsafety = creator.threadsafety
50
except
AttributeError:
51
try
:
52
if
not
callable(creator.connect):
53
raise
AttributeError
54
except
AttributeError:
55
threadsafety = 1
56
else
:
57
threadsafety = 0
58
if
not
threadsafety:
59
raise
NotSupportedError
(
"数据库模块未分配线程安全"
)
60
self.
_creator
= creator
61
self.
_maxusage
= maxusage
62
self.
_setsession
= setsession
63
self.
_failures
= failures
64
self.
_ping
= ping
65
self.
_closeable
= closeable
66
self._args, self.
_kwargs
= args, kwargs
67
self.
thread
= (threadlocal
or
local)()
68
69
def
steady_connection
(self):
70
"""Get a steady, non-persistent DB-API 2 connection."""
71
return
connect
(
72
self.
_creator
, self.
_maxusage
, self.
_setsession
,
73
self.
_failures
, self.
_ping
, self.
_closeable
,
74
*self._args, **self.
_kwargs
)
75
76
def
connection
(self, shareable=False):
77
"""共享连接
78
长时间未关闭则不会被共享
79
"""
80
try
:
81
con = self.
thread
.connection
82
except
AttributeError:
83
con = self.
steady_connection
()
84
if
not
con.threadsafety():
85
raise
NotSupportedError
(
"数据库模块未分配线程安全"
)
86
self.
thread
.connection = con
87
con._ping_check()
88
return
con
89
90
def
dedicated_connection
(self):
91
"""Alias for connection(shareable=False)."""
92
return
self.
connection
()
aestate.opera.DBPool.persistent_db.PersistentDB._setsession
_setsession
Definition:
persistent_db.py:59
aestate.opera.DBPool.persistent_db.PersistentDB.connection
def connection(self, shareable=False)
Definition:
persistent_db.py:76
aestate.opera.DBPool.persistent_db.PersistentDB._creator
_creator
Definition:
persistent_db.py:57
aestate.opera.DBPool.persistent_db.PersistentDB.steady_connection
def steady_connection(self)
Definition:
persistent_db.py:69
aestate.opera.DBPool.persistent_db.PersistentDBError
Definition:
persistent_db.py:12
aestate.opera.DBPool.persistent_db.PersistentDB._failures
_failures
Definition:
persistent_db.py:60
aestate.opera.DBPool.persistent_db.PersistentDB._kwargs
_kwargs
Definition:
persistent_db.py:63
aestate.opera.DBPool.persistent_db.PersistentDB._ping
_ping
Definition:
persistent_db.py:61
aestate.opera.DBPool.persistent_db.PersistentDB.thread
thread
Definition:
persistent_db.py:64
aestate.opera.DBPool.persistent_db.PersistentDB._maxusage
_maxusage
Definition:
persistent_db.py:58
aestate.opera.DBPool.persistent_db.PersistentDB.__init__
def __init__(self, creator, maxusage=None, setsession=None, failures=None, ping=1, closeable=False, threadlocal=None, *args, **kwargs)
Definition:
persistent_db.py:26
aestate.opera.DBPool.persistent_db.NotSupportedError
Definition:
persistent_db.py:16
aestate.opera.DBPool.steady_db.connect
def connect(creator, maxusage=None, setsession=None, failures=None, ping=1, closeable=True, *args, **kwargs)
Definition:
steady_db.py:16
aestate.opera.DBPool.persistent_db.PersistentDB.dedicated_connection
def dedicated_connection(self)
Definition:
persistent_db.py:90
aestate.opera.DBPool.persistent_db.PersistentDB._closeable
_closeable
Definition:
persistent_db.py:62
aestate.opera.DBPool.persistent_db.PersistentDB
Definition:
persistent_db.py:20
Generated by
1.8.17