python asyncio RowProxy object is not callable 오류가 발생했을 때
조회수 467회
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())
댓글 입력