[转载]安装discuz时出现 Error:Table 'ucenter.uc_pms

本文介绍了一种在安装Discuz论坛软件过程中遇到的错误“Error:Table'ucenter.uc_pms'doesn't exist”的原因及解决方法。该错误是由于数据库中缺少必要的表导致的,文章提供了创建缺失表的具体SQL语句。
[转载]安装discuz时出现 Error:Table 'ucenter.uc_pms
2011年08月15日
  第一次安装discuz,安装成功后跳到首页,报如下错误:
  Error:Table 'ucenter.uc_pms' doesn't exist
  Errno:1146
  SQL::SELECT count(*) FROM `ucenter`.uc_pms WHERE (related='0' AND msgfromid>'0' OR msgfromid='0') AND msgtoid='0' AND folder='inbox' AND new='1'
  解决方法如下:
  原因是因为数据库ucenter里没有uc_pms表。
  需要新建这个表:
  DROP TABLE IF EXISTS uc_pms;
  CREATE TABLE uc_pms (
  pmid int(10) unsigned NOT NULL auto_increment,
  msgfrom varchar(15) NOT NULL default '',
  msgfromid mediumint(8) unsigned NOT NULL default '0',
  msgtoid mediumint(8) unsigned NOT NULL default '0',
  folder enum('inbox','outbox') NOT NULL default 'inbox',
  new tinyint(1) NOT NULL default '0',
  subject varchar(75) NOT NULL default '',
  dateline int(10) unsigned NOT NULL default '0',
  message text NOT NULL,
  delstatus tinyint(1) unsigned NOT NULL default '0',
  related int(10) unsigned NOT NULL default '0',
  PRIMARY KEY(pmid),
  KEY msgtoid(msgtoid,folder,dateline),
  KEY msgfromid(msgfromid,folder,dateline),
  KEY related (related),
  KEY getnum (msgtoid,folder,delstatus)
  ) TYPE=MyISAM;
修改脚本功能: 1.原逻辑为人为录入ecs_price表中实例价格信息,修改为从云厂商接口获取 CREATE TABLE `ecs_price` ( `company` varchar(8) NOT NULL COMMENT '云服务商', `instance_type` varchar(20) NOT NULL COMMENT '机型', `instances_price` varchar(8) NOT NULL COMMENT '每月价格', PRIMARY KEY (`instance_type`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 2.磁盘价格计算的逻辑不变 3.最终费用仍为实例价格+磁盘价格,只不过实例价格由ecs_price_base表,换为ecs_price表 main.py -------- #_*_coding:utf-8_*_ from cloud import alicloud from cloud import tencent from cloud import huawei import json import sys import MySQLdb as pymysql import datetime import time from decimal import Decimal if sys.version_info.major == 3: import urllib.request as urllib2 from functools import reduce else: import urllib2 reload(sys) sys.setdefaultencoding('utf-8') remove_dist = [-200, 11, 12, 35, 1, -100, 258, 259, 368, 20004, 440, 444, 10000] db_config = { "charset": "utf8", "db": "game_server_price", "host": "10.14.101.113", "passwd": "NGIxMjhhOG", "port": 30001, "user": "grafana", } center_db_config = { "charset": "utf8", "db": "dw_game_wd", "host": "10.14.50.2", "passwd": "", "port": 3306, "user": "ops_read", } def mysql_conn(sql, values_list=[], **config): try: conn = pymysql.connect(**config) cursor = conn.cursor() if values_list: cursor.executemany(sql, values_list) else: cursor.execute(sql) conn.commit() except Exception as e: print(e) print(sql) sys.exit(e) conn.close() return cursor.fetchall() def get_online_number(): # 查询当月每日最大人数求平均值,去除最大值小于100的项,当新服未开放无法查询出新服,后续使用try处理 # 去除最大值小于100项目用于解决问题:新服开放当月平均值会被开服前的0平均掉 sql = "select" \ " dist,avg(cnt_max) from dw_game_wd.fact_online_day " \ "where" \ " DATE_FORMAT( log_date, '%Y%m' ) = DATE_FORMAT( CURRENT_DATE, '%Y%m' ) and cnt_max > 100 group by dist;" result = mysql_conn(sql, **center_db_config) online_info = {} for dist in result: online_info[dist[0]] = dist[1] return online_info def get_servers(): all_servers_list = [] all_disks_list = [] cloud_list = [huawei, alicloud, tencent] for cloud in cloud_list: instances = cloud() result_cloud = instances.run_cloud() server_list = result_cloud["instences"] disk_list = result_cloud["disks"] if not server_list: continue all_servers_list = all_servers_list + server_list if not disk_list: continue all_disks_list = all_disks_list + disk_list mysql_conn("delete from game_server_price.disk_info where date=CURRENT_DATE;", **db_config) mysql_conn("delete from game_server_price.instances_info where date=CURRENT_DATE;", **db_config) values_list = [] for instance in all_servers_list: name = instance['name'] ip = instance['ip'] instance_type = instance['instance_type'] company = instance['company'] id = instance['id'] values_list.append([name, ip, instance_type, company, id]) sql = 'insert into game_server_price.instances_info value (%s,%s,%s,%s,%s,CURRENT_DATE)' mysql_conn(sql, values_list, **db_config) sql = 'insert into game_server_price.disk_info value (%s,%s,%s,%s,%s,0,CURRENT_DATE)' mysql_conn(sql, all_disks_list, **db_config) return all_servers_list def get_ucenter_info(mainid=2): ucurl = "http://creator-sre.gyyx.cn/app_ass_info?main_id=%s" % (mainid) result_url = urllib2.urlopen(ucurl, timeout=30) result_url_data = result_url.read() alldata = json.loads(result_url_data)['data'] #alldata = json.loads(result_url_data) dist_info_list = [] tmp_info = {} for data in alldata: if data['app_name'] in ['ldb_s', 'ldb', 'stat'] or int(data['dist_id']) in remove_dist: continue ip = data['ass_ip'] dist_id = data['dist_id'] name = data['ass_gysn'] if not name: print(data) app_name = data['app_name'] if app_name == "LB":continue disk_size_setting = data['setting'].replace('G', '').replace(' ', '').split("+")[1:] if disk_size_setting == []: disk_size = 0 else: disk_size = reduce(lambda x, y: x + y, map(int, disk_size_setting)) dist_info_list.append([dist_id, name, app_name, ip, disk_size]) tmp_info[data['ip']] = name line_info_list = [] ucurl_line = 'http://creator-sre.gyyx.cn/gamelinelist?mainid=2' result_url = urllib2.urlopen(ucurl_line, timeout=30) result_url_data = result_url.read() alldata = json.loads(result_url_data)['data'] #alldata = json.loads(result_url_data) for dist in alldata: if int(dist['dist_id']) in remove_dist or int(dist['dist_id']) > 10000: continue dist_id = int(dist['dist_id']) name = tmp_info[dist['ip']] line_num = len(dist['line_nums'].split(',')) line_info_list.append([dist_id, name, line_num]) mysql_conn("delete from game_server_price.gs_info where date=CURRENT_DATE;", **db_config) gs_info_sql = 'insert into game_server_price.gs_info value (%s,%s,%s,current_date);' mysql_conn(gs_info_sql, line_info_list, **db_config) mysql_conn("delete from game_server_price.instances_center where date=CURRENT_DATE;", **db_config) mysql_conn("truncate table game_server_price.dist_list;", **db_config) sql = 'insert into game_server_price.instances_center value (%s,%s,%s,%s,%s,CURRENT_DATE)' mysql_conn(sql, dist_info_list, **db_config) sub_data_sql = 'select dist_id,sub_name from center_app.sub_category where main_id = 2 and flag in (1,0) and dist_id BETWEEN 2 and 25000 and del_info=1;' result = mysql_conn(sub_data_sql, **center_db_config) sub_data = list(result) insert_sub_sql = 'insert into game_server_price.dist_list value (%s,%s)' mysql_conn(insert_sub_sql, sub_data, **db_config) return dist_info_list def count_instance_price(): SQL_PRICES = ''' select c.name ,sum(b.price_base*a.size) as disk_price ,d.instances_price ,(sum(b.price_base*a.size)+ d.instances_price) as total ,c.instance_type ,e.trade_discount ,((sum(b.price_base*a.size)+ d.instances_price)*e.trade_discount) as last_price from game_server_price.disk_info a ,game_server_price.disk_price_info b ,game_server_price.trade_discount_base e ,game_server_price.instances_info c left join game_server_price.ecs_price_base d on c.instance_type=d.instance_type where a.disk_type = b.disk_type and a.company = b.company and a.date=date_sub(CURDATE(),interval 1 day) and c.date=date_sub(CURDATE(),interval 1 day) and c.id=a.server_id and a.company = e.company group by a.server_id ; ''' price_dict = {} result = mysql_conn(SQL_PRICES, **db_config) for i in result: name = str(i[0]).strip() price = str(i[6]) price_dict[name] = price return price_dict def count_all_dist_price(): sql = 'select a.name,a.app_name,b.company,b.instance_type,a.disk_size,a.dist_id ' \ 'from instances_center a,instances_info b ' \ 'where a.name=b.name and b.date=date_sub(CURDATE(),interval 1 day) ' \ 'and a.date=date_sub(CURDATE(),interval 1 day);' result = mysql_conn(sql, **db_config) all_price_dict = count_instance_price() all_instance_price = {} instance_price_list = [] error_list = [] for instance in result: name = str(instance[0]) price = all_price_dict[name] if price == "None": print("ERROR: %s price count failed!" % name) error_list.append(name) else: price = Decimal(price) if instance[1] == "adb_s": price = price / 2 instance_price_list.append([instance[5], instance[0], price]) try: all_instance_price[instance[5]][instance[0]] = price except: all_instance_price[instance[5]] = {} all_instance_price[instance[5]][instance[0]] = price if error_list: print "Error list:", str(error_list) sys.exit(1) mysql_conn("delete from game_server_price.instances_price_history where date=date_sub(CURRENT_DATE,interval 1 day);", **db_config) sql = 'insert into game_server_price.instances_price_history value (%s,%s,%s,date_sub(CURRENT_DATE,interval 1 day));' print instance_price_list mysql_conn(sql, instance_price_list, **db_config) all_dist_price = {} for dist in all_instance_price: all_dist_price[dist] = [] price = 0 for instance in all_instance_price[dist]: price = price + all_instance_price[dist][instance] all_dist_price[dist].append(price) return all_dist_price def get_dist_idc(): SQL_IDC = ''' select a.dist_id ,b.company from instances_center a ,instances_info b where a.app_name ='ccs' and a.name=b.name and a.date=b.date and a.date=date_sub(CURDATE(),interval 1 day); ''' idc_dict = {} result = mysql_conn(SQL_IDC, **db_config) for i in result: dist_id = i[0] idc = str(i[1]) idc_dict[dist_id] = idc return idc_dict def main(): get_servers() get_ucenter_info() count_all_dist_price() date = (datetime.datetime.now() + datetime.timedelta(days=-1)).strftime("%Y-%m-%d") all_dist_price = count_all_dist_price() idc_dict = get_dist_idc() online_info = get_online_number() all_dist_price_per = [] for dist_id in all_dist_price: price = Decimal(all_dist_price[dist_id][0]) if dist_id not in idc_dict: continue idc = idc_dict[dist_id] try: online_num = Decimal(online_info[dist_id]) except: # 当新服部署后尚未开服令人数为0 online_num = Decimal(0) if int(online_num) == 0: # 避免被除数为0 avg_price = price else: avg_price = Decimal(price / online_num).quantize(Decimal("0.000")) all_dist_price_per.append([dist_id, online_num, price, avg_price,idc, date]) date = (datetime.datetime.now() + datetime.timedelta(days=-1)).strftime("%Y-%m-%d") delete_sql = 'delete from game_server_price.asktao_dist_price where date = "%s";' % date mysql_conn(delete_sql, **db_config) sql = 'insert into game_server_price.asktao_dist_price value (%s,%s,%s,%s,%s,%s);' mysql_conn(sql, all_dist_price_per, **db_config) if __name__ == '__main__': main() ---------------- from tencentcloud.common import credential from tencentcloud.common.profile.client_profile import ClientProfile from tencentcloud.common.profile.http_profile import HttpProfile from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException from tencentcloud.cvm.v20170312 import cvm_client, models from tencentcloud.cbs.v20170312 import cbs_client from tencentcloud.cbs.v20170312 import models as cbsmodels from aliyunsdkcore.client import AcsClient from aliyunsdkecs.request.v20140526.DescribeInstancesRequest import DescribeInstancesRequest from aliyunsdkecs.request.v20140526.DescribeDisksRequest import DescribeDisksRequest from aliyunsdkcore.acs_exception.exceptions import ClientException from aliyunsdkcore.acs_exception.exceptions import ServerException from openstack import exceptions from openstack import connection import requests import signer import json class cloud(object): def __init__(self): self.DISK_TYPE = { "SAS": "premium", "STAT": "basic", "SSD": "ssd", "CLOUD_BASIC": "basic", "CLOUD_PREMIUM": "premium", "CLOUD_SSD": "ssd" } def get_instances_from_api(self): pass def get_disk_from_api(self): pass def get_instances(self): pass def get_disks(self): pass class alicloud(cloud): def get_instances_from_api(self, offset): zone_list = ['cn-beijing','cn-shanghai'] server_list = [] for zone_i in zone_list: try: client = AcsClient('LTAI4G696nAcjQUPayU7FVyA', '', zone_i) request = DescribeInstancesRequest() request.set_accept_format('json') request.set_PageNumber(offset) request.set_PageSize(100) response = client.do_action_with_exception(request) info = json.loads(response)['Instances']['Instance'] for instance in info: name = instance['InstanceName'] ip = instance['VpcAttributes']['PrivateIpAddress']['IpAddress'][0] instance_type = instance['InstanceType'] id = instance['InstanceId'] server_list.append({"name": name, "ip": ip, "instance_type": instance_type, "company": "AliCloud", "id": id}) except Exception as err: print(err) return 0, server_list def get_instances(self): try: server_list = [] for offset in range(20): offset = offset + 1 flag, server_list_tmp = self.get_instances_from_api(offset) if flag: raise Exception("get tencent instances error") if server_list_tmp == []: break server_list = server_list + server_list_tmp return server_list except Exception as err: print(err) return 1, err def get_disk_from_api(self, offset): zone_list = ['cn-beijing','cn-shanghai'] disks_list = [] for zone_i in zone_list: try: client = AcsClient('LTAI4G696nAcjQUPayU7FVyA', '', zone_i) request = DescribeDisksRequest() request.set_accept_format('json') request.set_PageNumber(offset) request.set_PageSize(100) response = client.do_action_with_exception(request) info = json.loads(response)['Disks']['Disk'] for disk in info: server_id = disk['InstanceId'] disk_id = disk['DiskId'] disk_type = disk['Category'] dist_size = disk['Size'] disk_info = ['AliCloud', disk_id, server_id, disk_type, dist_size] disks_list.append(disk_info) except Exception as err: print(err) return 0, disks_list def get_disks(self): try: disks_list = [] for offset in range(20): offset = offset + 1 flag, disks_list_tmp = self.get_disk_from_api(offset) if flag: raise Exception("get tencent disks error") if disks_list_tmp == []: break disks_list = disks_list + disks_list_tmp return disks_list except Exception as err: print(err, 11) return 1, err def run_cloud(self): instences = self.get_instances() disks = self.get_disks() return {"instences": instences, "disks": disks} class tencent(cloud): def get_instances_from_api(self, offset): zone_list = ['ap-beijing','ap-shanghai'] server_list = [] for zone_i in zone_list: try: cred = credential.Credential("AKIDiV3GSXs7brvQhkqYlkV7XkmDV7g0A6ub", "") httpProfile = HttpProfile() httpProfile.endpoint = "cvm.tencentcloudapi.com" clientProfile = ClientProfile() clientProfile.httpProfile = httpProfile client = cvm_client.CvmClient(cred, zone_i, clientProfile) req = models.DescribeInstancesRequest() params = {"Offset": offset, "Limit": 100} params = json.dumps(params) req.from_json_string(params) instance_result = client.DescribeInstances(req).to_json_string() instance_result = json.loads(instance_result) for instance in instance_result["InstanceSet"]: name = instance["InstanceName"] ip = instance["PrivateIpAddresses"][0] instance_type = instance["InstanceType"] id = instance["InstanceId"] status = instance["RestrictState"] print(instance) if status != "NORMAL":continue server_list.append({"name": name, "ip": ip, "instance_type": instance_type, "company": "Tencent", "id": id }) except Exception as err: print(err) return 0, server_list def get_instances(self): try: server_list = [] for offset in range(20): offset = offset * 100 flag, server_list_tmp = self.get_instances_from_api(offset) if flag: raise Exception("get tencent instances error") if server_list_tmp == []: break server_list = server_list + server_list_tmp return server_list except Exception as err: print(err) def get_disk_from_api(self, offset): disks_list = [] zone_list = ['ap-beijing','ap-shanghai'] for zone_i in zone_list: try: cred = credential.Credential("AKIDiV3GSXs7brvQhkqYlkV7XkmDV7g0A6ub", "") httpProfile = HttpProfile() httpProfile.endpoint = "cbs.tencentcloudapi.com" clientProfile = ClientProfile() clientProfile.httpProfile = httpProfile client = cbs_client.CbsClient(cred, zone_i, clientProfile) req = cbsmodels.DescribeDisksRequest() params = {"Offset": offset, "Limit": 100} params = json.dumps(params) req.from_json_string(params) disks_result = client.DescribeDisks(req).to_json_string() disks_result = json.loads(disks_result) for disk in disks_result['DiskSet']: disk_id = disk['DiskId'] try: server_id = disk['InstanceIdList'][0] except: server_id = 'not-mount' disk_type = disk['DiskType'] dist_size = disk['DiskSize'] disk_info = ['Tencent', disk_id, server_id, disk_type, dist_size] disks_list.append(disk_info) except TencentCloudSDKException as err: print(err) return 0, disks_list def get_disks(self): try: disks_list = [] for offset in range(20): offset = offset * 100 flag, disks_list_tmp = self.get_disk_from_api(offset) if flag: raise Exception("get tencent instances error") if disks_list_tmp == []: break disks_list = disks_list + disks_list_tmp return disks_list except Exception as err: print(err) def run_cloud(self): instences = self.get_instances() disks = self.get_disks() return {"instences": instences, "disks": disks} class huawei(cloud): def get_instances_from_api(self): try: server_list = [] projectId = "968431fc7f2f4e7bac2cefdfe369c81d" cloud = "myhuaweicloud.com" region = "cn-north-4" AK = "JJDCGNDVKNWKTK4YSSIP" SK = "" conn = connection.Connection( project_id=projectId, cloud=cloud, region=region, ak=AK, sk=SK) servers = conn.compute.servers() for server in servers: name = server.name id = server.id for key in server.addresses: addr_id = key ip = server.addresses[addr_id][0]['addr'] instance_type = server.flavor['id'] server_list.append({"name": name, "ip": ip, "instance_type": instance_type, "company": "HuaWei", "id": id}) return 0, server_list except Exception as err: print(err) return 1, err def get_instances(self): try: flag, server_list = self.get_instances_from_api() if flag: raise Exception("get huawei instances error") return server_list except Exception as err: print(err) def get_disks(self): try: disk_list = [] projectId = "968431fc7f2f4e7bac2cefdfe369c81d" cloud = "myhuaweicloud.com" region = "cn-north-4" AK = "JJDCGNDVKNWKTK4YSSIP" SK = "" conn = connection.Connection( project_id=projectId, cloud=cloud, region=region, ak=AK, sk=SK) disks = conn.evs.volumes() for m in disks: for disk in m.volumes: disk_id = disk['id'] server_id = disk['attachments'][0]['server_id'] disk_type = disk['volume_type'] dist_size = disk['size'] disk_info = ['HuaWei', disk_id, server_id, disk_type, dist_size] disk_list.append(disk_info) return disk_list except Exception as err: print(err) return 1, err def run_cloud(self): instences = self.get_instances() disks = self.get_disks() return {"instences": instences, "disks": disks} ---------------- 腾讯查询价格api--------- # -*- coding: utf-8 -*- import os import json import types from tencentcloud.common import credential from tencentcloud.common.profile.client_profile import ClientProfile from tencentcloud.common.profile.http_profile import HttpProfile from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException from tencentcloud.cvm.v20170312 import cvm_client, models try: # 密钥信息从环境变量读取,需要提前在环境变量中设置 TENCENTCLOUD_SECRET_ID 和 TENCENTCLOUD_SECRET_KEY # 使用环境变量方式可以避免密钥硬编码在代码中,提高安全性 # 生产环境建议使用更安全的密钥管理方案,如密钥管理系统(KMS)、容器密钥注入等 # 请参见:https://cloud.tencent.com/document/product/1278/85305 # 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取 cred = credential.Credential(os.getenv("TENCENTCLOUD_SECRET_ID"), os.getenv("TENCENTCLOUD_SECRET_KEY")) # 使用临密钥示例 # cred = credential.Credential("SecretId", "SecretKey", "Token") # 实例化一个http选项,可选的,没有特殊需求可以跳过 httpProfile = HttpProfile() httpProfile.endpoint = "cvm.tencentcloudapi.com" # 实例化一个client选项,可选的,没有特殊需求可以跳过 clientProfile = ClientProfile() clientProfile.httpProfile = httpProfile # 实例化要请求产品的client对象,clientProfile是可选的 client = cvm_client.CvmClient(cred, "ap-beijing", clientProfile) # 实例化一个请求对象,每个接口都会对应一个request对象 req = models.InquiryPriceRunInstancesRequest() params = { "Placement": { "Zone": "ap-beijing-6" }, "ImageId": "img-p5nkhc2v", "InstanceChargeType": "PREPAID", "InstanceChargePrepaid": { "Period": 1 }, "InstanceType": "SA2.2XLARGE16" } req.from_json_string(json.dumps(params)) # 返回的resp是一个InquiryPriceRunInstancesResponse的实例,与请求对象对应 resp = client.InquiryPriceRunInstances(req) # 输出json格式的字符串回包 print(resp.to_json_string()) except TencentCloudSDKException as err: print(err) ----腾讯api返回: { "Response": { "Price": { "BandwidthPrice": {}, "InstancePrice": { "Discount": 60, "DiscountPrice": 286.98, "OriginalPrice": 478.3 } }, "RequestId": "bd16e011-f83d-4bbc-bb2d-c31361508e11" } } ------------------------------------------------------------------------------------------------------------------------- 阿里查询价格api--------- # -*- coding: utf-8 -*- # This file is auto-generated, don't edit it. Thanks. import os import sys from typing import List from alibabacloud_ecs20140526.client import Client as Ecs20140526Client from alibabacloud_credentials.client import Client as CredentialClient from alibabacloud_tea_openapi import models as open_api_models from alibabacloud_ecs20140526 import models as ecs_20140526_models from alibabacloud_tea_util import models as util_models from alibabacloud_tea_util.client import Client as UtilClient class Sample: def __init__(self): pass @staticmethod def create_client() -> Ecs20140526Client: """ 使用凭据初始化账号Client @return: Client @throws Exception """ # 工程代码建议使用更安全的无AK方式,凭据配置方式请参见:https://help.aliyun.com/document_detail/378659.html。 credential = CredentialClient() config = open_api_models.Config( credential=credential ) # Endpoint 请参考 https://api.aliyun.com/product/Ecs config.endpoint = f'ecs.cn-beijing.aliyuncs.com' return Ecs20140526Client(config) @staticmethod def main( args: List[str], ) -> None: client = Sample.create_client() describe_price_request = ecs_20140526_models.DescribePriceRequest( region_id='cn-beijing', instance_type='ecs.c5.xlarge', price_unit='Month', period=1 ) runtime = util_models.RuntimeOptions() try: # 复制代码运行请自行打印 API 的返回值 client.describe_price_with_options(describe_price_request, runtime) except Exception as error: # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 # 错误 message print(error.message) # 诊断地址 print(error.data.get("Recommend")) UtilClient.assert_as_string(error.message) @staticmethod async def main_async( args: List[str], ) -> None: client = Sample.create_client() describe_price_request = ecs_20140526_models.DescribePriceRequest( region_id='cn-beijing', instance_type='ecs.c5.xlarge', price_unit='Month', period=1 ) runtime = util_models.RuntimeOptions() try: # 复制代码运行请自行打印 API 的返回值 await client.describe_price_with_options_async(describe_price_request, runtime) except Exception as error: # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 # 错误 message print(error.message) # 诊断地址 print(error.data.get("Recommend")) UtilClient.assert_as_string(error.message) if __name__ == '__main__': Sample.main(sys.argv[1:]) --------阿里api返回: { "RequestId": "D1F58F14-AAF7-585D-B3A5-1523CC5D94A1", "PriceInfo": { "Price": { "OriginalPrice": 365, "ReservedInstanceHourPrice": 0, "DiscountPrice": 146, "Currency": "CNY", "DetailInfos": { "DetailInfo": [ { "OriginalPrice": 0, "DiscountPrice": 0, "Resource": "image", "TradePrice": 0 }, { "OriginalPrice": 358, "DiscountPrice": 143.2, "Resource": "instanceType", "TradePrice": 214.8 }, { "OriginalPrice": 7, "DiscountPrice": 2.8, "Resource": "systemDisk", "TradePrice": 4.2 }, { "OriginalPrice": 0, "DiscountPrice": 0, "Resource": "bandwidth", "TradePrice": 0 } ] }, "TradePrice": 219 }, "Rules": { "Rule": [ { "Description": "合同优惠_整单_6.0折", "RuleId": 2000019367043 } ] } } } ------------------------------------------------------------------------------------------------------------------ 火山云询价api # Example Code generated by Beijing Volcanoengine Technology. from __future__ import print_function import volcenginesdkcore import volcenginesdkbilling from volcenginesdkcore.rest import ApiException if __name__ == '__main__': # 注意示例代码安全,代码泄漏会导致AK/SK泄漏,有极大的安全风险。 configuration = volcenginesdkcore.Configuration() configuration.ak = "Your AK" configuration.sk = "Your SK" configuration.region = "cn-beijing" # set default configuration volcenginesdkcore.Configuration.set_default(configuration) # use global default configuration api_instance = volcenginesdkbilling.BILLINGApi() query_price_for_renew_request = volcenginesdkbilling.QueryPriceForRenewRequest( instance_id_list=["i-ye3aogjxfkwh2yrey86c"], product="ECS", use_duration=1, ) try: # 复制代码运行示例,请自行打印API返回值。 api_instance.query_price_for_renew(query_price_for_renew_request) except ApiException as e: # 复制代码运行示例,请自行打印API错误信息。 # print("Exception when calling api: %s\n" % e) pass --------火山云询价api调用返回结果 { "ResponseMetadata": { "RequestId": "20250924090622B58F540645656224EA78", "Action": "QueryPriceForRenew", "Version": "2022-01-01", "Service": "billing", "Region": "cn-beijing" }, "Result": { "Currency": "CNY", "TotalOriginalAmount": "561.17", "TotalDiscountAmount": "252.53", "InstanceAmountList": [ { "InstanceID": "i-ye3aogjxfkwh2yrey86c", "Product": "ECS", "ConfigurationCode": "ecs.c3a.2xlarge.month", "OriginalAmount": "561.17", "DiscountAmount": "252.53" } ], "CalSerialNo": "CSN_d39k83j65irjk3r3543g", "BaseResp": { "StatusMessage": "", "StatusCode": 0, "HTTPStatusCode": 0, "ErrorCode": "" } } }
09-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值