This commit is contained in:
yumoqing 2019-05-14 11:20:28 +08:00
parent 13ed0dd15e
commit ffa87bfd59
4 changed files with 50 additions and 24 deletions

Binary file not shown.

View File

@ -210,20 +210,22 @@ class DBPools:
@wraps(func) @wraps(func)
async def wrap_func(dbname,NS,callback,**kw): async def wrap_func(dbname,NS,callback,**kw):
sor = await self.getSqlor(dbname) sor = await self.getSqlor(dbname)
desc = func(dbname,NS,callback,**kw)
try: try:
desc = func(dbname,NS,callback,**kw)
ret = await sor.runSQL(desc,NS,callback,**kw) ret = await sor.runSQL(desc,NS,callback,**kw)
except Exception as e: except Exception as e:
print('error:',e) print('error:',e)
raise e raise e
finally: finally:
await self.freeSqlor(sor) await self.freeSqlor(sor)
return ret
return wrap_func return wrap_func
def runSQLPaging(self,func): def runSQLPaging(self,func):
@wraps(func) @wraps(func)
async def wrap_func(dbname,NS,**kw): async def wrap_func(dbname,NS,**kw):
sor = await self.getSqlor(dbname) sor = await self.getSqlor(dbname)
try:
desc = func(dbname,NS,**kw) desc = func(dbname,NS,**kw)
total = await sor.record_count(desc,NS) total = await sor.record_count(desc,NS)
recs = await sor.pagingdata(desc,NS) recs = await sor.pagingdata(desc,NS)
@ -232,20 +234,28 @@ class DBPools:
"rows":recs "rows":recs
} }
print(len(recs),'records return') print(len(recs),'records return')
await self.freeSqlor(sor)
return data return data
except Exception as e:
print('error',e)
raise e
finally:
await self.freeSqlor(sor)
return wrap_func return wrap_func
async def runSQLResultFields(self, dbname,NS,**kwargs): def runSQLResultFields(self, func):
sor = self.getSqlor(dbname) @wraps(func)
async def wrap_func(dbname,NS,**kw):
sor = await self.getSqlor(dbname)
try:
desc = func(dbname,NS,**kw) desc = func(dbname,NS,**kw)
conn = await self._aquireConn(dbname) ret = await sor.resultFields(desc,NS)
async with conn.cursor() as cur:
sor.setCursor(conn,cur)
ret=await sor.sqlIterator(desc,NS)
ret = [ {'name':i[0],'type':i[1]} for i in cur.description ]
return ret return ret
await self._releaseConn(dbname,conn) except Exception as e:
print('error=',e)
raise e
finally:
await self.freeSqlor(sor)
return wrap_func
async def getTables(self,dbname): async def getTables(self,dbname):
@self.inSqlor @self.inSqlor

View File

@ -309,7 +309,7 @@ class SQLor(object):
self.recs.append(rec) self.recs.append(rec)
c = Cnt() c = Cnt()
await self.sqlIterator(cnt_desc,NS,c.handler) await self.runSQL(cnt_desc,NS,c.handler)
print(c.recs[0]) print(c.recs[0])
t = c.recs[0]['rcnt'] t = c.recs[0]['rcnt']
return t return t
@ -341,9 +341,15 @@ class SQLor(object):
self.recs.append(rec) self.recs.append(rec)
c = Cnt() c = Cnt()
await self.sqlIterator(paging_desc,NS,c.handler) await self.runSQL(paging_desc,NS,c.handler)
return c.recs return c.recs
async def resultFields(self,desc,NS):
NS.update(rows=1,page=1)
r = await self.pagingdata(desc,NS)
ret = [ {'name':i[0],'type':i[1]} for i in self.cur.description ]
return ret
async def runSQL(self,desc,NS,callback,**kw): async def runSQL(self,desc,NS,callback,**kw):
class RecordHandler: class RecordHandler:
def __init__(self,ns,name): def __init__(self,ns,name):

View File

@ -31,7 +31,7 @@ dbs={
loop = asyncio.get_event_loop() loop = asyncio.get_event_loop()
pool = DBPools(dbs,loop=loop) pool = DBPools(dbs,loop=loop)
async def testfunc(): async def testfunc1():
@pool.runSQL @pool.runSQL
def sql(db,ns,callback): def sql(db,ns,callback):
return { return {
@ -39,4 +39,14 @@ async def testfunc():
} }
x = await sql('cfae',{},print) x = await sql('cfae',{},print)
loop.run_until_complete(testfunc()) async def testfunc2():
@pool.runSQLResultFields
def sql(db,NS):
return {
"sql_string":"select * from product",
}
x = await sql('cfae',{})
print(x)
loop.run_until_complete(testfunc1())
loop.run_until_complete(testfunc2())