51 lines
1.3 KiB
Python

import os
import sys
import asyncio
from appPublic.worker import get_event_loop
from appPublic.jsonConfig import getConfig
from appPublic.worker import AsyncWorker
from sqlor.dbpools import DBPools
from appPublic.dictObject import DictObject
from xls2ddl.xlsxData import XLSXData
def chunked(lst, n):
for i in range(0, len(lst), n):
yield lst[i:i+n]
async def load_tabledata(dbname, tblname, data):
db = DBPools()
async with db.sqlorContext(dbname) as sor:
for r in data:
try:
await sor.D(tblname, {'id': r.id})
except:
pass
await sor.C(tblname, r.copy())
async def load_data():
if len(sys.argv) < 4:
print(f'{sys.argv[0]} server_path dbname datafile')
return 1
runpath = sys.argv[1]
dbname = sys.argv[2]
datafile = sys.argv[3]
config = getConfig(runpath)
db = DBPools(config.databases)
xlsx = XLSXData(datafile)
worker = AsyncWorker(maxtask=100)
tasks = []
for i,s in enumerate(xlsx.book.worksheets):
tblname = xlsx.book.sheetnames[i]
dic = xlsx.readRecords(tblname, s)
for chunk in chunked(dic[tblname], 100):
t = asyncio.create_task(load_tabledata(dbname, tblname, chunk))
tasks.append(t)
await asyncio.wait(tasks)
return 0
def main():
get_event_loop().run_until_complete(load_data())
if __name__ == '__main__':
main()