Aestate
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 
17  """DB-API module not supported by PersistentDB."""
18 
19 
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 
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