unitTest.py 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. from utils.rdbmsUtil.databaseUtil import DatabaseUtil
  2. from utils.rdbmsUtil.modelBase import Base
  3. from utils.rdbmsUtil.modelUser import User, user_factory # user_factory 确保工厂注册代码被执行
  4. from utils.rdbmsUtil.modelUserOperations import UserOperations
  5. # company_factory 确保工厂注册代码被执行
  6. from utils.rdbmsUtil.modelCompany import Company, company_factory
  7. from utils.rdbmsUtil.modelCompanyOperations import CompanyOperations
  8. from sqlalchemy.sql import text
  9. import pandas as pd
  10. def access_sqlite():
  11. db = DatabaseUtil('sqlite:///mydatabase.db')
  12. Base.metadata.create_all(db.engine)
  13. companys = [Company(id=1, name="DS-Tech"), Company(id=2, name="ZN-Tech")]
  14. users = [User(name="Alice", age=31, companyid=1),
  15. User(name="Bob", age=25, companyid=2)]
  16. with db.session_scope() as session:
  17. company_ops = CompanyOperations()
  18. user_ops = UserOperations()
  19. company_ops.upsert_companys(session, companys)
  20. user_ops.upsert_users(session, users)
  21. # session.flush() # 确保所有的 SQL 操作都被推送到数据库
  22. user_ops.update(session, name="Alice", age=32)
  23. result = user_ops.get_user(session, name="Alice", age=32)
  24. for user in result:
  25. print(user)
  26. def access_tidb():
  27. print('access MySQL/TiDB')
  28. # DatabaseUtil(url='mysql+pymysql://root:123456@192.168.50.234:4000/energy',
  29. # pool_size=5,
  30. # max_overflow=3,
  31. # connect_timeout=1800)
  32. # db = DatabaseUtil('mysql+pymysql://root:123456@192.168.50.234:4000/energy')
  33. db = DatabaseUtil('mysql+pymysql://root:admin123456@192.168.50.235:30306/energy_data_prod')
  34. query_text = f"""SELECT * FROM analysis_result """
  35. query_text=f"""SELECT wind_turbine_number, time_stamp, wind_velocity, active_power, yaw_error1 FROM `WOF055000062_second` WHERE wind_turbine_number IN ('WOG02325') AND time_stamp >= '2026-02-01 00:00:00' AND time_stamp <= '2026-04-26 00:00:00' AND lab in (0,1,2,3,4)"""
  36. chunks = []
  37. with db.session_scope() as session:
  38. # query_result = session.execute(text(query_text)).fetchall()
  39. # dataFrame = pd.DataFrame(query_result)
  40. conn=session.connection()
  41. result=conn.execution_options(stream_results=True).execute(text(query_text))
  42. # 每次取 100000 行,可根据实际情况调整
  43. while True:
  44. rows = result.fetchmany(100000)
  45. if not rows:
  46. break
  47. chunks.append(pd.DataFrame(rows))
  48. if not chunks:
  49. return pd.DataFrame()
  50. dataFrame=pd.concat(chunks, ignore_index=True)
  51. print(len(dataFrame))
  52. print(dataFrame.head(5))
  53. access_tidb()