51 lines
1.3 KiB
Python
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()
|