标签:语句 index execute return explain mysql sql self cls
https://bbs.huaweicloud.com/blogs/177202
https://www.cnblogs.com/yycc/p/7338894.html
先用explain查看性能,如果性能达标可以执行,如果不达标需要添加索引查询
from sqlalchemy import create_engine class ConnectMysql: """操作Mysql""" instance = None def __new__(cls, *args, **kwargs): if not cls.instance: cls.instance = object.__new__(cls) return cls.instance else: return cls.instance def __init__(self, db_url, db_name): self.engine = create_engine(db_url + db_name) self.conn = self.engine.connect() def execute(self, sql): """执行sql语句,仅限创建/删除索引""" try: assert ('alter' in sql or 'ALTER' in sql or 'drop' in sql or 'DROP' in sql), '非创建/删除索引语句,查询请用fetch_one' self.conn.execute(sql) except Exception as e: log.error("非创建/删除索引语句,sql:{}".format(sql)) log.exception(e) def explain_sql(self, sql): """查看sql性能""" type_list = ['system', 'const', 'eq_ref', 'ref', 'fulltext', 'ref_or_null', 'index_merge', 'unique_subquery', 'index_subquery', 'range'] try: execute = self.conn.execute("explain " + sql) value = execute.fetchone() if value[3] in type_list: return True return False except Exception as e: log.error("未查询到数据库,sql:{}".format(sql)) log.exception(e) return False def fetch_one(self, sql): """查询sql语句返回的第一条数据""" try: assert self.explain_sql(sql), 'sql语句性能未达标' execute = self.conn.execute(sql) value = execute.fetchone() return value[0] except Exception as e: log.error("未查询到数据库,sql:{}".format(sql)) log.exception(e) def fetch_one_with_index(self, add_index_sql, sql, drop_index_sql): """创建索引,查询sql语句返回的第一条数据""" self.execute(add_index_sql) value = self.fetch_one(sql) self.execute(drop_index_sql) return value
标签:语句,index,execute,return,explain,mysql,sql,self,cls 来源: https://www.cnblogs.com/erchun/p/15329113.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。