python asyncio RowProxy object is not callable 오류가 발생했을 때

조회수 451회

1개의 데이터베이스에서 일정 규칙을 갖고 여러개의 테이블이 있습니다. table 이름을 리스트 형태로 구한다음, sqlalchemy와 asyncio 를 통해 비동기적으로 모든 테이블에 접근해서 테이블 로우를 계산하는 연습을 하고 있습니다. loop.run_in_executor 함수에 sqlalchemy engine(connection)과 sql 쿼리를 넘겨주고 있는데 다음과 같은 에러가 발생하네요.. run_in_executor에 대한 이해가 덜 된 거 같습니다. 함수와 인수를 어떻게 넘겨줘야할까요?

import sqlalchemy
import asyncio
from datetime import datetime


def all_dev_id(engine):
    vms_device_dev_id_all = engine.execute("SELECT dev_id FROM vms.device").fetchall()
    cctv_names = ["name_000" + hex(dev_id[0]).replace("0x", "") for dev_id in vms_device_dev_id_all]
    return cctv_names

async def cctv_vfs(cctv_name):
    q = "SELECT count(0) FROM test.{0} ".format(cctv_name)
    try:
        cctv_vfs = engine.execute(q).fetchone()
        cctv_vfs = await loop.run_in_executor(None, cctv_vfs, q)
        return cctv_vfs
    except Exception as e:
        print(e)
        return "Not Connected"

async def main():
    all_cctv_vfs = [asyncio.ensure_future(cctv_vfs(cctv_name)) for cctv_name in cctv_names]
    result = await asyncio.gather(*all_cctv_vfs)
    print(result)


DATABASE_URL = 'mysql+mysqldb://root:pass@000.000.000.000:3306'
engine = sqlalchemy.create_engine(DATABASE_URL, echo=False)
cctv_names = all_dev_id(engine)

loop = asyncio.get_event_loop()
loop.run_until_complete(main())

  • 'RowProxy' object is not callable. 김재민 2020.11.12 14:50

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)