diff --git a/sqlor/.dbpools.py.swp b/sqlor/.dbpools.py.swp index 41808d2..c24df80 100644 Binary files a/sqlor/.dbpools.py.swp and b/sqlor/.dbpools.py.swp differ diff --git a/sqlor/dbpools.py b/sqlor/dbpools.py index 6ee08c0..1094e83 100644 --- a/sqlor/dbpools.py +++ b/sqlor/dbpools.py @@ -210,42 +210,52 @@ class DBPools: @wraps(func) async def wrap_func(dbname,NS,callback,**kw): sor = await self.getSqlor(dbname) - desc = func(dbname,NS,callback,**kw) try: + desc = func(dbname,NS,callback,**kw) ret = await sor.runSQL(desc,NS,callback,**kw) except Exception as e: print('error:',e) raise e finally: await self.freeSqlor(sor) + return ret return wrap_func def runSQLPaging(self,func): @wraps(func) async def wrap_func(dbname,NS,**kw): sor = await self.getSqlor(dbname) - desc = func(dbname,NS,**kw) - total = await sor.record_count(desc,NS) - recs = await sor.pagingdata(desc,NS) - data = { - "total":total, - "rows":recs - } - print(len(recs),'records return') - await self.freeSqlor(sor) - return data + try: + desc = func(dbname,NS,**kw) + total = await sor.record_count(desc,NS) + recs = await sor.pagingdata(desc,NS) + data = { + "total":total, + "rows":recs + } + print(len(recs),'records return') + return data + except Exception as e: + print('error',e) + raise e + finally: + await self.freeSqlor(sor) return wrap_func - async def runSQLResultFields(self, dbname,NS,**kwargs): - sor = self.getSqlor(dbname) - desc = func(dbname,NS,**kw) - conn = await self._aquireConn(dbname) - 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 ] + def runSQLResultFields(self, func): + @wraps(func) + async def wrap_func(dbname,NS,**kw): + sor = await self.getSqlor(dbname) + try: + desc = func(dbname,NS,**kw) + ret = await sor.resultFields(desc,NS) 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): @self.inSqlor diff --git a/sqlor/sor.py b/sqlor/sor.py index b3a18b4..340fe4c 100644 --- a/sqlor/sor.py +++ b/sqlor/sor.py @@ -309,7 +309,7 @@ class SQLor(object): self.recs.append(rec) c = Cnt() - await self.sqlIterator(cnt_desc,NS,c.handler) + await self.runSQL(cnt_desc,NS,c.handler) print(c.recs[0]) t = c.recs[0]['rcnt'] return t @@ -341,8 +341,14 @@ class SQLor(object): self.recs.append(rec) c = Cnt() - await self.sqlIterator(paging_desc,NS,c.handler) + await self.runSQL(paging_desc,NS,c.handler) 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): class RecordHandler: diff --git a/test/test.py b/test/test.py index 9a45d0a..2a093de 100644 --- a/test/test.py +++ b/test/test.py @@ -31,7 +31,7 @@ dbs={ loop = asyncio.get_event_loop() pool = DBPools(dbs,loop=loop) -async def testfunc(): +async def testfunc1(): @pool.runSQL def sql(db,ns,callback): return { @@ -39,4 +39,14 @@ async def testfunc(): } 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())