query_fields.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. from sqlalchemy import create_engine, and_
  2. from sqlalchemy.orm import sessionmaker
  3. from baangt.base.DataBaseORM import DATABASE_URL, TestrunLog, GlobalAttribute, TestCaseLog, TestCaseSequenceLog, TestCaseField
  4. import time
  5. class QueryFields:
  6. def __init__(self):
  7. # craate session
  8. engine = create_engine(DATABASE_URL)
  9. self.session = sessionmaker(bind=engine)
  10. def by_objects(self, name=None):
  11. db = self.session()
  12. print('Fields fetching started')
  13. time_start = time.time()
  14. time_mid = time_start
  15. # fetch fields
  16. fields = db.query(
  17. TestCaseField.name,
  18. TestCaseField.value,
  19. TestCaseLog.number,
  20. )\
  21. .join(TestCaseField.testcase).join(TestCaseLog.testcase_sequence).join(TestCaseSequenceLog.testrun)\
  22. .filter(and_(TestrunLog.testrunName == name, TestCaseSequenceLog.number == 1))\
  23. .order_by(TestrunLog.startTime).order_by(TestCaseLog.number)
  24. counter = 0
  25. for fname, fvalue, tc in fields.yield_per(1000):
  26. counter += 1
  27. v = fvalue.replace("\n", " ")[:30]
  28. print(f'{counter}\t{name}{tc:4} {fname:32}{v}')
  29. #if not counter%100000:
  30. # time_cur = time.time()
  31. # print(f'** {counter:,} records fetched in {time_cur-time_mid} seconds'.replace(',', ' '))
  32. # print(field)
  33. # time_mid = time_cur
  34. time_elapsed = time.time() - time_start
  35. print(f'\n*** FETCHED: {counter:,} fields'.replace(',', ' '))
  36. print(f'*** EXECUTION TIME: {time_elapsed}')
  37. if __name__ == '__main__':
  38. q = QueryFields()
  39. q.by_objects(name='kfz.xlsx')