diff --git a/src/db/engine.py b/src/db/engine.py index 0994335..ce94c9f 100644 --- a/src/db/engine.py +++ b/src/db/engine.py @@ -12,18 +12,29 @@ import sys sys.path.append(os.getcwd() + '/src') from sqlalchemy import create_engine, text +from sqlalchemy.orm import registry from config.env import env_db_host, env_db_name, env_db_user, env_db_password, env_db_port SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://' + env_db_user + ':'+ env_db_password +'@'+ env_db_host + ':' + env_db_port + '/' + env_db_name _global_engine = None -def get_engine(): +def get_engine(**args): global _global_engine if _global_engine == None: - _global_engine = create_engine(SQLALCHEMY_DATABASE_URI, echo=True, future=True) + _global_engine = create_engine(SQLALCHEMY_DATABASE_URI, future=True, **args) return _global_engine +_global_base = None + +def get_orm_base(): + global _global_base + mapper_registry = registry() + Base = mapper_registry.generate_base() + if _global_base == None: + _global_base = Base + return _global_base + if __name__ == '__main__': engine1 = get_engine() with engine1.connect() as conn: @@ -34,3 +45,4 @@ if __name__ == '__main__': ) for row in result: print("row", row) + diff --git a/src/models/__init__.py b/src/models/__init__.py new file mode 100644 index 0000000..e17922f --- /dev/null +++ b/src/models/__init__.py @@ -0,0 +1,13 @@ +''' +Desc: +File: /__init__.py +Project: models +File Created: Saturday, 27th August 2022 12:24:17 pm +Author: luxuemin2108@gmail.com +----- +Copyright (c) 2022 Camel Lu +''' + +print('--models init--'); + +import fund diff --git a/src/models/fund.py b/src/models/fund.py new file mode 100644 index 0000000..7464d69 --- /dev/null +++ b/src/models/fund.py @@ -0,0 +1,24 @@ +''' +Desc: +File: /fund.py +Project: models +File Created: Saturday, 27th August 2022 11:47:51 am +Author: luxuemin2108@gmail.com +----- +Copyright (c) 2022 Camel Lu +''' +import sys +sys.path.append('./src') + +from sqlalchemy import Table +from models.var import prefix, ORM_Base, engine + +fund_table_base = prefix + 'base' + +fund_table = Table(fund_table_base, ORM_Base.metadata, autoload=True, autoload_with=engine) + +class Fund(ORM_Base): + __table__ = fund_table + + def __repr__(self): + return f"Fund Base(id={self.id!r}, name={self.fund_code!r}, manager_id={self.fund_name!r})" diff --git a/src/models/manager.py b/src/models/manager.py new file mode 100644 index 0000000..d696cf4 --- /dev/null +++ b/src/models/manager.py @@ -0,0 +1,49 @@ +''' +Desc: +File: /manager.py +Project: models +File Created: Thursday, 25th August 2022 10:21:22 pm +Author: luxuemin2108@gmail.com +----- +Copyright (c) 2022 Camel Lu +''' +import sys +sys.path.append('./src') + +from sqlalchemy.orm import Session, registry, relationship, aliased +from sqlalchemy import DATE, MetaData, Table, Column, Integer, BigInteger, String, ForeignKey, select +from db.engine import get_engine +from models.var import prefix, ORM_Base, engine + +manager_table_name = prefix + 'manager' +manager_table = Table(manager_table_name, ORM_Base.metadata, autoload=True, autoload_with=engine) + +class Manager(ORM_Base): + __table__ = manager_table + # managerAssoc = relationship("ManagerAssoc", back_populates="manager") + def __repr__(self): + return f"Manager(id={self.id!r}, name={self.name!r}, manager_id={self.manager_id!r})" + +class ManagerAssoc(ORM_Base): + __tablename__ = prefix + 'manager_assoc' + manager_key = manager_table_name + '.manager_id' + id = Column(BigInteger, primary_key=True) + quarter_index = Column(String(12)) + manager_id = Column(String(32), ForeignKey(manager_key)) + fund_code_key = prefix + 'base' + '.fund_code' + fund_code= Column(String(10), ForeignKey(fund_code_key)) + # manager = relationship('Manager', backref='manager_assoc') + # fund_base = relationship("Fund", backref="manager_assoc") + + def __repr__(self): + return f"ManagerAssoc(id={self.id!r}, name={self.manager_id!r}, fullname={self.fund_code_id!r})" + +def create(): + ORM_Base.metadata.create_all(engine) + # mapper_registry.metadata.create_all(engine) + # ManagerAssoc.__table__.drop(engine) + + +if __name__ == '__main__': + create() + # demo() diff --git a/src/models/var.py b/src/models/var.py new file mode 100644 index 0000000..6b76b51 --- /dev/null +++ b/src/models/var.py @@ -0,0 +1,16 @@ +''' +Desc: 变量配置 +File: /config.py +Project: models +File Created: Saturday, 27th August 2022 12:20:04 pm +Author: luxuemin2108@gmail.com +----- +Copyright (c) 2022 Camel Lu +''' +from db.engine import get_engine, get_orm_base + +ORM_Base = get_orm_base() + +prefix = 'fund_morning_' + +engine = get_engine(echo=True)