This commit is contained in:
yumoqing 2026-05-16 16:16:20 +08:00
parent 912c17dad8
commit 74a97697a5
2 changed files with 22 additions and 6 deletions

View File

@ -14,6 +14,7 @@ from appPublic.myjson import loadf
from appPublic.jsonConfig import getConfig
from appPublic.rc4 import unpassword
from appPublic.log import exception
from appPublic.event_dispatcher import EventDispatcher
import threading
from .sor import SQLor
@ -103,10 +104,11 @@ class SqlorPool:
@SingletonDecorator
class DBPools:
class DBPools(EventDispatcher):
def __init__(self,databases={},max_connect=100,loop=None):
if loop is None:
loop = get_event_loop()
super().__init__(self)
self.loop = loop
self.max_connect = max_connect
self._pools = {}
@ -139,6 +141,7 @@ class DBPools:
sqlor = None
async with pool.context() as sqlor:
try:
sqlor.dbpools = self
await sqlor.enter()
yield sqlor
if sqlor and sqlor.dataChanged:

View File

@ -72,6 +72,9 @@ def readsql(fn):
return b
class SQLor(object):
"""
self.dbpools was set by DBPools
"""
def __init__(self,dbdesc=None,sqltp = '$[',sqlts = ']$',sqlvp = '${',sqlvs = '}$'):
self.conn = None
self.cur = None
@ -605,11 +608,14 @@ class SQLor(object):
sql = 'insert into %s.%s (%s) values (%s)' % (self.dbname, tablename,fns,vfns)
rf = RegisterFunction()
rfname = f'{self.dbname}:{tablename}:c:before'
self.dbpools.dispatch(rfname, ns)
ret = await rf.exe(rfname, ns)
if isinstance(ret, dict):
ns.update(ret)
r = await self.execute(sql,ns.copy())
await rf.exe(f'{self.dbname}:{tablename}:c:after', ns)
rfname = f'{self.dbname}:{tablename}:c:after'
self.dbpools.dispatch(rfname, ns)
await rf.exe(rfname, ns)
return r
async def R(self,tablename,ns,filters=None):
@ -653,11 +659,15 @@ class SQLor(object):
sql = 'update %s.%s set %s where %s' % (self.dbname, tablename,
u_str,c_str)
rf = RegisterFunction()
ret = await rf.exe(f'{self.dbname}:{tablename}:u:before',ns)
rfname = f'{self.dbname}:{tablename}:u:before'
self.dbpools.dispatch(rfname, ns)
ret = await rf.exe(rfname, ns)
if isinstance(ret, dict):
ns.update(ret)
r = await self.execute(sql, ns.copy())
await rf.exe(f'{self.dbname}:{tablename}:u:after',ns)
rfname = f'{self.dbname}:{tablename}:u:after'
self.dbpools.dispatch(rfname, ns)
await rf.exe(rfname, ns)
return r
async def D(self,tablename, ns):
@ -668,11 +678,14 @@ class SQLor(object):
c_str = ' and '.join(c)
sql = 'delete from %s.%s where %s' % (self.dbname, tablename,c_str)
rf = RegisterFunction()
ret = await rf.exe(f'{self.dbname}:{tablename}:d:before', ns)
rfname = f'{self.dbname}:{tablename}:d:before'
ret = await rf.exe(rfname, ns)
if isinstance(ret, dict):
ns.update(ret)
r = await self.execute(sql, ns)
ns = await rf.exe(f'{self.dbname}:{tablename}:d:after', ns)
rfname = f'{self.dbname}:{tablename}:d:after'
self.dbpools.dispatch(rfname, ns)
ns = await rf.exe(rfname, ns)
return r
async def connect(self):