From 1983d021078ce3f4b65eeb281cf61bc6a75e15ac Mon Sep 17 00:00:00 2001 From: Mr Chen Date: Tue, 6 Feb 2024 21:17:24 +0800 Subject: [PATCH] up --- plugins/data_query/sql_mysql.py | 136 +++++++++++++--------- plugins/data_query/static/html/index.html | 2 +- plugins/data_query/static/js/app.js | 124 ++++++++++++++++++-- 3 files changed, 198 insertions(+), 64 deletions(-) diff --git a/plugins/data_query/sql_mysql.py b/plugins/data_query/sql_mysql.py index b110b35c7..20cfd379e 100755 --- a/plugins/data_query/sql_mysql.py +++ b/plugins/data_query/sql_mysql.py @@ -27,10 +27,11 @@ class nosqlMySQL(): __DB_PASS = None __DB_USER = None - __DB_PORT = 6379 + __DB_PORT = 3306 __DB_HOST = '127.0.0.1' __DB_CONN = None __DB_ERR = None + __DB_SOCKET = None __DB_LOCAL = None @@ -38,41 +39,69 @@ class nosqlMySQL(): self.__config = self.get_options(None) - def mgdb_conn(self): + def conn(self): if self.__DB_HOST in ['127.0.0.1', 'localhost']: my_path = "{}/mysql".format(mw.getServerDir()) if not os.path.exists(my_path): return False if not self.__DB_LOCAL: + # print(self.__config) self.__DB_PORT = int(self.__config['port']) + self.__DB_USER = self.__config['username'] + self.__DB_PASS = self.__config['password'] + self.__DB_SOCKET = self.__config['socket'] - # print(self.__DB_HOST,self.__DB_PORT, self.__DB_PASS) try: - self.__DB_CONN = pymongo.MongoClient(host=self.__DB_HOST, port=self.__DB_PORT, maxPoolSize=10) - self.__DB_CONN.admin.command('ping') - return self.__DB_CONN - except pymongo.errors.ConnectionFailure: - return False + + db = mw.getMyORM() + db.setPort(self.__DB_PORT) + db.setPwd(self.__DB_PASS) + db.setUser(self.__DB_USER) + if self.__DB_SOCKET != '': + db.setSocket(self.__DB_SOCKET) + + return db except Exception: self.__DB_ERR = mw.get_error_info() return False + def sqliteDb(self,dbname='databases'): + my_root_path = mw.getServerDir() +'/mysql' + name = 'mysql' + conn = mw.M(dbname).dbPos(my_root_path, name) + return conn + # 获取配置项 def get_options(self, get=None): result = {} - mgdb_content = mw.readFile("{}/mysql/my.conf".format(mw.getServerDir())) - if not mgdb_content: return False + + my_cnf_path = "{}/mysql/etc/my.cnf".format(mw.getServerDir()) + my_content = mw.readFile(my_cnf_path) + if not my_content: return False + + mysql_pass = self.sqliteDb('config').where('id=?', (1,)).getField('mysql_root') + result['password'] = mysql_pass + result['username'] = 'root' keys = ["bind_ip", "port"] result['host'] = '127.0.0.1' rep = 'port\s*=\s*(.*)' - ip_re = re.search(rep, mgdb_content) - if ip_re: - result['port'] = int(ip_re.groups()[0].strip()) + + port_re = re.search(rep, my_content) + if port_re: + result['port'] = int(port_re.groups()[0].strip()) + else: + result['port'] = 3306 + + socket_rep = 'socket\s*=\s*(.*)' + socket_re = re.search(socket_rep, my_content) + if socket_re: + result['socket'] = socket_re.groups()[0].strip() else: - result['port'] = 27017 + result['socket'] = '' + return result def set_host(self, host, port, name, username, password, prefix=''): @@ -101,36 +130,43 @@ class nosqlMySQLCtr(): def getDbList(self, args): sid = args['sid'] - mgdb_instance = self.getInstanceBySid(sid).mgdb_conn() - if mgdb_instance is False: + my_instance = self.getInstanceBySid(sid).conn() + if my_instance is False: return mw.returnData(False,'无法链接') result = {} - doc_list = mgdb_instance.list_database_names() + db_list = my_instance.query('show databases') rlist = [] - for x in doc_list: - if not x in ['admin', 'config', 'local']: - rlist.append(x) + for x in db_list: + if not x['Database'] in ['information_schema', 'mysql', 'performance_schema','sys']: + rlist.append(x['Database']) result['list'] = rlist return mw.returnData(True,'ok', result) - def getCollectionsList(self, args): + def getTableList(self, args): sid = args['sid'] - name = args['name'] + db = args['db'] - mgdb_instance = self.getInstanceBySid(sid).mgdb_conn() - if mgdb_instance is False: + my_instance = self.getInstanceBySid(sid).conn() + if my_instance is False: return mw.returnData(False,'无法链接') + sql = "select * from information_schema.tables where table_schema = '"+db+"'" + table_list = my_instance.query(sql) + # print(table_list) + + rlist = [] + for x in table_list: + # print(x['TABLE_NAME']) + rlist.append(x['TABLE_NAME']) result = {} - collections = mgdb_instance[name].list_collection_names() - result['collections'] = collections + result['list'] = rlist return mw.returnData(True,'ok', result) def getDataList(self, args): sid = args['sid'] db = args['db'] - collection = args['collection'] + table = args['table'] p = 1 size = 10 if 'p' in args: @@ -139,42 +175,32 @@ class nosqlMySQLCtr(): if 'size' in args: size = args['size'] - mgdb_instance = self.getInstanceBySid(sid).mgdb_conn() - if mgdb_instance is False: - return mw.returnData(False,'无法链接') + start_index = (p - 1) * size - db_instance = mgdb_instance[db] - collection_instance = db_instance[collection] - start_index = (p - 1) * size - end_index = p * size - args_where = args['where'] + args_where = {} + if 'where' in args: + args_where = args['where'] - where = {} - if 'field' in args_where: - mg_field = args_where['field'] + my_instance = self.getInstanceBySid(sid).conn() + if my_instance is False: + return mw.returnData(False,'无法链接') - if mg_field == '_id': - mg_value = ObjectId(args_where['value']) - where[mg_field] = mg_value - else: - mg_value = args_where['value'] - where[mg_field] = re.compile(mg_value) + my_instance.setDbName(db) + sql = 'select count(*) as num from ' + table + count_result = my_instance.query(sql) + count = count_result[0]['num'] - # print(where) - result = collection_instance.find(where).skip(start_index).limit(size).sort({'_id':-1}) - count = collection_instance.count_documents(where) - d = [] - for document in result: - d.append(document) - doc_str_json = dumps(d) - result = json.loads(doc_str_json) + sql = 'select * from ' + table + ' limit '+str(start_index)+',10'; + # print(sql) + result = my_instance.query(sql) + # print(result) page_args = {} page_args['count'] = count - page_args['tojs'] = 'mongodbDataList' + page_args['tojs'] = 'mysqlGetDataList' page_args['p'] = p page_args['row'] = size @@ -198,9 +224,9 @@ def get_db_list(args): return t.getDbList(args) # 获取 mysql 列表 -def get_collections_list(args): +def get_table_list(args): t = nosqlMySQLCtr() - return t.getCollectionsList(args) + return t.getTableList(args) def get_data_list(args): t = nosqlMySQLCtr() diff --git a/plugins/data_query/static/html/index.html b/plugins/data_query/static/html/index.html index 4353fcf14..6146ca10d 100644 --- a/plugins/data_query/static/html/index.html +++ b/plugins/data_query/static/html/index.html @@ -20,7 +20,7 @@
-
+
diff --git a/plugins/data_query/static/js/app.js b/plugins/data_query/static/js/app.js index 797989099..4babd07bb 100755 --- a/plugins/data_query/static/js/app.js +++ b/plugins/data_query/static/js/app.js @@ -231,35 +231,143 @@ function mysqlGetSid(){ return 0; } +function mysqlGetDbName(){ + return $('#mysql .mysql_db_list select[name=mysql_db]').val(); +} + +function mysqlGetTableName(){ + return $('#mysql .mysql_table_list select[name=mysql_table]').val(); +} + +function mysqlInitField(f, data){ + var option_html = ''; + for (var i = 0; i < f.length; i++) { + if (data['soso_field'] == f[i]){ + option_html+= ''; + } else { + option_html+= ''; + } + + + } + + $('select[name="mysql_field_key"]').html(option_html); + + $('#mysql .mysql_find').unbind('click').click(function(){ + var val = $('input[name="mysql_field_value"]').val(); + if (val == ''){ + layer.msg('搜索不能为空!',{icon:7}); + return; + } + mysqlDataList(1); + }); +} + + function mysqlGetDbList(){ var sid = mysqlGetSid(); myPostCB('get_db_list',{'sid':sid} ,function(rdata){ if (rdata.data.status){ - var items = rdata.data.data['items']; + var items = rdata.data.data['list']; var content = ''; for (var i = 0; i < items.length; i++) { var name = items[i]; if (i == 0){ - content += ''; + content += ''; } else { - content += ''; + content += ''; } } - $('#memcached .item_list select').html(content); - $('#memcached .item_list select').change(function(){ - memcachedGetKeyList(1); + // console.log(content); + $('#mysql .mysql_db_list select[name=mysql_db]').html(content); + $('#mysql .mysql_db_list select[name=mysql_db]').change(function(){ + mysqlGetTableList(1); }); + + mysqlGetTableList(1); + closeInstallLayer(); } else { showInstallLayer(); } - mysqlGetTableList(1); }); } function mysqlGetTableList(p){ - console.log('mysqlGetTableList',p); + // console.log('mysqlGetTableList',p); + var sid = mysqlGetSid(); + var db = mysqlGetDbName(); + myPostCB('get_table_list',{'sid':sid,'db':db} ,function(rdata){ + if (rdata.data.status){ + + var items = rdata.data.data['list']; + var content = ''; + for (var i = 0; i < items.length; i++) { + var name = items[i]; + if (i == 0){ + content += ''; + } else { + content += ''; + } + } + // console.log(content); + $('#mysql .mysql_table_list select[name=mysql_table]').html(content); + $('#mysql .mysql_table_list select[name=mysql_table]').change(function(){ + mysqlGetDataList(1); + }); + + mysqlGetDataList(1); + } + }); +} + +function mysqlGetDataList(p){ + var sid = mysqlGetSid(); + var db = mysqlGetDbName(); + var table = mysqlGetTableName(); + myPostCB('get_data_list',{'sid':sid,'db':db,'table':table,'p':p} ,function(rdata){ + console.log(rdata); + if (rdata.data.status){ + + if (rdata.data.status){ + var data = rdata.data.data; + var dlist = data['list']; + // console.log(dlist); + + var fields = mongodbGetDataFields(dlist); + if (fields.length != 0 ){ + mysqlInitField(fields,data); + } + + var header_field = ''; + for (var i =0 ; i'; + } + $('#mysql_table thead tr').html(header_field); + + var tbody = ''; + for (var i = 0; i < dlist.length; i++) { + tbody += ''; + for (var j = 0; j < fields.length; j++) { + var f = fields[j]; + if (f in dlist[i]) { + tbody += ''+dlist[i][f]+''; + } else { + tbody += 'undefined'; + } + } + tbody += ''; + } + + // $('#mysql_table').css('width', $('.col-md-9').width()).parent().css('width', $(document).width()).css('overflow','scroll'); + // $('#mysql').css('width',$(document).width()-240).css('overflow','hidden'); + $('#mysql_table table').css('table-layout','fixed'); + $('#mysql_table tbody').html(tbody); + $('#mysql .mysql_list_page').html(data.page); + } + } + }); }