(self, get)
| 234 | |
| 235 | # 导入 |
| 236 | def InputSql(self, get): |
| 237 | |
| 238 | name = get.name |
| 239 | file = get.file |
| 240 | |
| 241 | find = public.M('databases').where("name=? AND LOWER(type)=LOWER('SQLServer')", (name,)).find() |
| 242 | if not find: return public.returnMsg(False, '数据库不存在!') |
| 243 | |
| 244 | tmp = file.split('.') |
| 245 | exts = ['sql', 'zip', 'bak'] |
| 246 | ext = tmp[len(tmp) - 1] |
| 247 | if ext not in exts: |
| 248 | return public.returnMsg(False, 'DATABASE_INPUT_ERR_FORMAT') |
| 249 | |
| 250 | backupPath = session['config']['backup_path'] + '/database' |
| 251 | |
| 252 | if ext == 'zip': |
| 253 | try: |
| 254 | fname = os.path.basename(file).replace('.zip', '') |
| 255 | dst_path = backupPath + '/' + fname |
| 256 | if not os.path.exists(dst_path): os.makedirs(dst_path) |
| 257 | |
| 258 | public.unzip(file, dst_path) |
| 259 | for x in os.listdir(dst_path): |
| 260 | if x.find('bak') >= 0 or x.find('sql') >= 0: |
| 261 | file = dst_path + '/' + x |
| 262 | break |
| 263 | except: |
| 264 | return public.returnMsg(False, '导入失败,该文件不是有效的zip格式的文件。') |
| 265 | |
| 266 | mssql_obj = self.get_mssql_obj_by_sid(find['sid']) |
| 267 | data = mssql_obj.query("use %s ;select filename from sysfiles" % find['name']) |
| 268 | |
| 269 | isError = self.IsSqlError(data) |
| 270 | if isError != None: return isError |
| 271 | if type(data) == str: return public.returnMsg(False, data) |
| 272 | |
| 273 | mssql_obj.execute("ALTER DATABASE %s SET OFFLINE WITH ROLLBACK IMMEDIATE" % (find['name'])) |
| 274 | mssql_obj.execute("use master;restore database %s from disk='%s' with replace, MOVE N'%s' TO N'%s',MOVE N'%s_Log' TO N'%s' " % (find['name'], file, find['name'], data[0][0], find['name'], data[1][0])) |
| 275 | mssql_obj.execute("ALTER DATABASE %s SET ONLINE" % (find['name'])) |
| 276 | |
| 277 | public.WriteLog("TYPE_DATABASE", '导入数据库[{}]成功'.format(name)) |
| 278 | return public.returnMsg(True, 'DATABASE_INPUT_SUCCESS') |
| 279 | |
| 280 | # 同步数据库到服务器 |
| 281 | def SyncToDatabases(self, get): |
nothing calls this directly
no test coverage detected