地址 https://blog.csdn.net/u014131617/article/details/85336084
class ConnectDBBySqlAlchemy:
def init(self, db_name, conf=None, config_key=“archimedes_db”, reflect_all=False , database=“mysql”, **kwargs):
databases = {“mysql”:“mysql+mysqlconnector”,“postgresql”:“postgresql”}
#通过传入库,得到链接库的命令
self.use_database = databases.get(database)
# 初始化
self.config_key = config_key
self.conf = conf
self.username = kwargs.get(“username”) if kwargs.get(“username”) else conf.get(config_key, “user_name”)
self.password = kwargs.get(“password”) if kwargs.get(“password”) else conf.get(config_key, “password”)
self.host = kwargs.get(“host”) if kwargs.get(“host”) else conf.get(config_key, “host”)
self.port = kwargs.get(“port”) if kwargs.get(“port”) else conf.get(config_key, “port”)
self.db_name = db_name
self.db_session = self.connet_db()
if reflect_all is True:
self.tables = self.tables_mode()
else:
self.Base = self.single_table_mode()
def connet_db(self):
engine_str = "{0}://{1}:{2}@{3}:{4}/{5}".format(self.use_database,self.username, self.password, self.host,
self.port, self.db_name)
self.engine = create_engine(engine_str, max_overflow=-1, convert_unicode=True)
self.metadata = MetaData(bind=self.engine)
Session = sessionmaker(bind=self.engine)
# return Session(), Base.classes
return Session()
def single_table_mode(self):
return declarative_base()
def select_table(self, table_name, schema=None):
return Table(table_name, self.metadata, autoload=True, schema=schema)
def tables_mode(self):
self.Base = automap_base()
self.Base.prepare(self.engine, reflect=True)
return self.Base.classes
def __del__(self):
self.db_session.close()
4 sqlalchemy的使用(单独映射)
db = ConnectDBBySqlAlchemy(DB, conf ,config_key=“archimedes_db_pg”,database=‘postgresql’)
db_session = db.db_session
class TblManagermentRegisterInfo(db.Base):
table = db.select_table(“tbl_management_register_info”,schema=“config”)
results = db_session.query(TblManagermentRegisterInfo).filter(TblManagermentRegisterInfo.is_online == ‘1’ and TblManagermentRegisterInfo.table_alise == viewname).all()