浏览代码

Update sqlite3.py

MoeClub 3 年之前
父节点
当前提交
430045f083
共有 1 个文件被更改,包括 25 次插入19 次删除
  1. 25 19
      sqlite3.py

+ 25 - 19
sqlite3.py

@@ -5,9 +5,10 @@
 import aiosqlite
 import asyncio
 
-class SQLite3:
-    def __init__(self, name, table):
+class SQLite:
+    def __init__(self, name, table, loop=None):
         aiosqlite.core.LOG.disabled = True
+        self.loop = loop
         self.table = table
         self._path = os.path.join(os.path.dirname(os.path.abspath(__file__)), name)
         self._queue = asyncio.Queue(maxsize=1)
@@ -22,16 +23,16 @@ class SQLite3:
         except:
             pass
 
-    async def execute(self, sql, write=False):
+    async def _execute(self, sql, write=False):
         value = db = cursor = field = None
         try:
             if write is True:
                 await self._queue.get()
-                db = await aiosqlite.connect(database=self._path, check_same_thread=False, timeout=60)
+                db = await aiosqlite.connect(database=self._path, check_same_thread=False, timeout=60, loop=self.loop)
                 cursor = await db.execute(sql)
                 await db.commit()
             else:
-                db = await aiosqlite.connect(database=self._path, check_same_thread=False, timeout=60)
+                db = await aiosqlite.connect(database=self._path, check_same_thread=False, timeout=60, loop=self.loop)
                 cursor = await db.execute(sql)
                 if cursor.description:
                     field = [i[0] for i in cursor.description]
@@ -46,29 +47,34 @@ class SQLite3:
             if db is not None:
                 await db.close()
             if write is True:
+                try:
+                    self._queue.task_done()
+                except:
+                    pass
                 await self._queue.put(None)
+            del field, cursor, db
         return value
 
-    async def Init(self, tbl='(row0 text primary key, row1 text, row2 text)'):
+    async def Init(self, tbl):
         try:
-            vacuum = await self.execute('''PRAGMA auto_vacuum;''')
+            vacuum = await self._execute('''PRAGMA auto_vacuum;''')
             if vacuum[0]['auto_vacuum'] == 0:
-                await self.execute('''PRAGMA auto_vacuum = 1;''', True)
-                await self.execute('''PRAGMA encoding = "UTF-8";''', True)
-                await self.execute('''PRAGMA journal_mode = WAL;''', True)
-                await self.execute('''PRAGMA temp_store = MEMORY;''', True)
-                await self.execute('''PRAGMA synchronous = NORMAL;''', True)
-                await self.execute('''PRAGMA page_size = 4096;''', True)
-                create_tbl = '''create table %s %s''' % (self.table, tbl)
-                await self.execute(create_tbl, True)
+                await self._execute('''PRAGMA auto_vacuum = 1;''', True)
+                await self._execute('''PRAGMA encoding = "UTF-8";''', True)
+                # await self._execute('''PRAGMA journal_mode = WAL;''', True)
+                await self._execute('''PRAGMA temp_store = MEMORY;''', True)
+                await self._execute('''PRAGMA synchronous = NORMAL;''', True)
+                # await self._execute('''PRAGMA page_size = 4096;''', True)
+                create_tbl = '''create table ''' + self.table + ''' ({})'''.format(tbl)
+                await self._execute(create_tbl, True)
         except Exception as e:
             if 'already exists' not in str(e):
                 print("init:", e)
 
+                
 if __name__ == "__main__":
-    SQL = SQLite3("MoeClub.db", "MoeClub")
     loop = asyncio.get_event_loop()
-    loop.run_until_complete(SQL.Init())
-    
-    asyncio.run(SQL.execute("select * from MoeClub;"))
+    SQL = SQLite("MoeClub.db", "MoeClub", loop=loop)
+    loop.run_until_complete(SQL.Init('row0 text primary key, row1 text, row2 text'))
+    loop.run_until_complete(SQL.execute("select * from MoeClub;"))