Python - Как преобразовать модуль на основе sqlite3 в неблокирующий режим с помощью asyncio - PullRequest
1 голос
/ 09 июня 2019

Я перевожу пользовательскую библиотеку в режим asyncio.

Когда я пытаюсь получить курсор, он возвращает сопрограмму. Как превратить сопрограмму в объект курсора?

Вот код, который я перевожу на asyncio.

# -*- coding: utf-8 -*-
#  sqlite01.py
import os
import asyncio
import sqlite3
import time
class SQLite():

    def __init__(self,DB='./static/Clientes.db'):
        print("sqlite01>Current Directory:%s" %os.getcwd())
        self.DB=DB

    def GetCursor(self):
         with sqlite3.connect(self.DB) as db:
             return db.cursor()

    async def GetCursor_Async(self):
         async with sqlite3.connect(self.DB) as db:
             return db.cursor()

    def CreateHTML(self,CURSOR,OPT=None):
        para =[]
        for row in CURSOR.execute('''SELECT * FROM cliente ORDER BY nome'''):
            para.append( "<option value=\""+str(row[0])+"\">"+str(row[0])+"</option>")
        return para

Как я тестирую этот модуль


import sqlite01
SQL = sqlite01.SQLite()

#Blocking mode
Cursor = SQL.GetCursor()
Result = SQL.CreateHTML(Cursor)
type(Result)
<class 'list'>

#NON-BLOCKING ERROR
CURSOR = SQL.GetCursor_Async()
SQL.CreateHTML(CURSOR)
>>> 

Original exception was:
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/felipe/workspace/nwi_prtg/codes/sqlite01.py", line 23, in CreateHTML
    for row in CURSOR.execute('''SELECT * FROM cliente ORDER BY nome'''):
AttributeError: 'coroutine' object has no attribute 'execute'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...