plpython写的一个存储过程函数

pg使用python编写存储过程_postgresql – 可以在Postgres Python存储过程中使用NLTK 您可以在PL / Python存储过程或触发器中使用几乎任何Python库.概念要理解的关键点是PL / Python是CPython(无论如何都在PostgreSQL中包括9.3);它使用与普通独立Python完全相同的解释器,它只是将它作为库加载到PostgreSQL支持的.有一些限制(如下所述),如果它适用于CPython,它可以与PL / Python一起使用.如果您的系统上安装了多个Py... 阅读详情
    今天花了好久使用plpython写了一个存储过程函数,终于解决了问题,庆祝一下,哈哈。下面把代码贴上来,可供参考:

-- Function: bazaar_denim_nav(text)

DROP FUNCTION bazaar_denim_nav(text);

CREATE OR REPLACE FUNCTION bazaar_denim_nav(text)
  RETURNS text AS
$BODY$
    import cPickle as pickle
   
    # Unpack args
    filters = [f.strip() for f in args[0].split(',')]
    filters = [f for f in filters if f]
    filters.append('designerdenimnav')

    # Work out some SQL to extract all products that match a set of filters.
    if filters:
        # Find complete list of categories we should be using.
        inClause = ','.join(['$'+str(i+1) for i in range(len(filters))])
        qNodes = plpy.prepare(
            """select lft_node, rgt_node from hierarchy where object in
            (select id from category where alphanum in (%s))""" % inClause,
            ['text']*len(filters)
            )
        nodes = list(plpy.execute(qNodes, filters))
       
        # Build query
        parts = []
        for node in nodes:
            parts.append(
                """select distinct i.id from item i
                join item_category ic on ic.item_id=i.id
                join category c on c.id=ic.category_id
                where ic.category_id in (select object from hierarchy
                where lft_node >= %s and rgt_node <= %s)""" % (node['lft_node'], node['rgt_node'])
                )
        filterSql = ' intersect '.join(parts)
        filterSql = ' '.join(filterSql.split())

    # Prepare most of the plans
    if filters:
        if len(filterSql) > 0:
            qItems = plpy.prepare("select i.id from item i inner join stock_level sl on i.id=sl.item_id where sl.in_stock>0 and i.id in (%s) order by i.id"%filterSql)
        else:
            # Nothing matches the criteria so return now
            return pickle.dumps([])
    else:
        qItems = plpy.prepare("select i.id from item i inner join stock_level sl on i.id=sl.item_id where sl.in_stock>0 order by i.id")

    # get item lists
    items = list(plpy.execute(qItems))
    itemids = [item['id'] for item in items]
    strItemIds = ', '.join([str(id) for id in itemids])

    # define get sub categories function which filter by the in_stock
    def getChildren(alphanum, strItemIds):
        if strItemIds:
            qChildren = plpy.prepare("""select distinct c.name, c.alphanum from category c inner join item_category ic on c.id=ic.category_id 
                where c.id in (select object from hierarchy where
                parent=(select h.id from hierarchy h inner join category ca on ca.id=h.object where ca.alphanum='%s'))
                and ic.item_id in (%s)"""%(alphanum, strItemIds))
            children = list(plpy.execute(qChildren))
        else:
            children = []
        return children
       
       
     # Classification list
    classification = {}
    classification['brand'] = []
    classification['type'] = []
   
    classification['brand'] = getChildren('brand', strItemIds)
    top_types = getChildren('designerdenimnav', strItemIds)
    for temp in top_types:
        t_alphanum = temp['alphanum'][1:]
        t_name = temp['name'][1:]
        t_children = getChildren(t_alphanum, strItemIds)
        classification['type'].append({'name':t_name, 'alphanum':t_alphanum, 'children': t_children})
   
   
    return pickle.dumps(classification)
   
$BODY$
  LANGUAGE 'plpythonu' VOLATILE
  COST 100;
ALTER FUNCTION bazaar_denim_nav(text) OWNER TO postgres;

postgres pl/python 安装需要的plpython2.so文件 postgres pl/python 安装需要的plpython2.so文件和extension文件夹 立即下载

相关推荐

postgres jar

PostgreSql数据库驱动 PostgreSql数据库驱动PostgreSql数据库驱动

python文件存储过程_pymysql存储过程代码

import pymysqlconn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='666', db='sqlexample',charset='utf-8')cursor = conn.cursor(cursor=pymsql.cursor.DictCursor)#执行存储过程,获取存储过程的结果集,将...

weixin_39669204的博客 445

用blender为模型贴图并在gazebo中显示

用blender为模型贴图并在gazebo中显示 首先我用的是最新的blender2.92版本,附上链接https://www.blender.org/download/。并设置好简体中文。语言可以在编辑->偏好设置->界面里面设置。 首先界面右上角的摄像头,方块,灯光三个场景全都删除。 接着导入stl格式的模型文件,下面以tianbot_mini上面的激光雷达的模型为例。 导入激光雷达模型后,点击进入上方的UV Editing按钮进入UV编辑界面 此时我面看见网格化的激光雷达模型

qq_48427527的博客 8001

python 存储过程_python学习笔记 day45 存储过程

1. 存储过程存储过程也是一个别名,是保存在mysql中的一大堆sql语句所起的别名,日后可以直接不用在终端或者python中写sql语句 而是直接使用别名就可以拿到sql语句的执行结果;对比视图来看,视图是用来保存查询结果的一张临时表,是虚拟的表,不可以插入,只可以查询操作;而在存储过程中只需要写一个别名就可以自动去执行存储过程中的sql语句;所以试图就是别名代指的临时表,而存储过程就是用别名代...

weixin_39816362的博客 580

锐捷交换机路由器配置全攻略:从基础命令到高级功能(附常用命令速查表)

本文提供锐捷交换机路由器配置全攻略,涵盖从基础命令到高级功能的详细指南,包括VLAN划分、DHCP配置、链路聚合等实用技巧,并附常用命令速查表,帮助网络管理员快速掌握锐捷设备运维。

weixin_29285605的博客 518

基于 Go 的微信滑块验证码自动化:协议还原与图像算法深度解析

本文从协议层、算法层和工程优化三个维度,系统拆解了基于Go的微信滑块验证码自动化方案。在协议层,通过手写protobuf编码器和RSA加密复现了微信UUID生成机制;在算法层,采用图像匹配技术实现滑块缺口定位;在工程层面,构建了包含HTTP状态机和随机化设备指纹的完整验证流程。文章重点阐述了技术实现的形式化建模、算法选择依据和复杂度分析,为工程师和算法研究者提供了可验证的技术方案。核心代码结构包括UUID生成、滑块状态机和图像匹配算法等模块,通过分层设计实现了高效可靠的验证码自动化破解。

weixin_65409651的博客 1293

python 存储过程_python学习笔记(75) 存储过程

存储过程 / SQL语句 / 类和对象#########################################delimiter //creat PROCEDURE p1()BEGINselect * from student;INSERT inti teacher(tname) values("ct");ENDdelimiter ;call p1();cursor.callproc('...

weixin_39655362的博客 166

FreeRTOS OTA实战:从Bootloader设计到安全升级的完整流程(附MQTT示例代码)

本文详细介绍了在FreeRTOS系统中实现安全OTA固件升级的完整流程。内容涵盖从Bootloader设计、存储分区规划到与MQTT协议集成的OTA Agent任务开发,并重点解析了固件签名验证、防回滚等关键安全机制,为嵌入式物联网设备提供了一套高可靠性的远程升级解决方案。

weixin_29248653的博客 161

python 函数 过程_plpython写的一个存储过程函数

-- Function: bazaar_denim_nav(text)DROP FUNCTION bazaar_denim_nav(text);CREATE OR REPLACE FUNCTION bazaar_denim_nav(text)RETURNS text AS$BODY$import cPickle as pickle# Unpack argsfilters = [f.strip() ...

weixin_39809140的博客 247

物联网开发笔记(34)- 使用Micropython开发ESP32开发板之控制步进电机(28BYJ-48)

使用Micropython开发ESP32开发板之控制步进电机(28BYJ-48)

zhusongziye的博客 1万+

【WorkBuddy专栏19】技能的创造与迁移——从零开始打造你的AI工作流

【WorkBuddy专栏19】技能的创造与迁移——从零开始打造你的AI工作流

AI人人懂 373

python编写存储过程_plpython写的一个存储过程函数

今天花了好久使用plpython写了一个存储过程函数,终于解决了问题,庆祝一下,哈哈。下面把代码贴上来,可供参考: -- Function: bazaar_denim_nav(text) DROP FUNCTION bazaar_denim_nav(text); CREATE OR REPLACE FUNCTION bazaar_denim_nav(text) RETURNS text ...

weixin_39533896的博客 280

道通无人机信号分析

本文分析了道通无人机及其遥控器的EIRP参数(表1-2),发现不同地区的功率标准存在差异。针对5230MHz图传信号,观测到四帧连续信号结构类似LORA分包传输。脉冲分析(表3)显示固定3.9ms脉宽和1.1ms间隔。频谱异常表现为非矩形窗特征,经分析系多径效应引起的频率选择性衰落所致——不同路径传播导致特定频率出现相长/相消干涉,形成波峰波谷的起伏频谱特征。这种现象与无线信道的多径时延、衰减差异直接相关。

jiaotinglang2580的博客 487

lua调用mysql存储过程_使用pl/lua写存储过程提升10倍性能__1. 为什么要使用pl/lua pl/lua是一个插件,可以使用lua语言写PostgreSQL的存储过程和函数,使用lua语...

### **​1. 为什么要使用pl/lua**#### pl/lua是一个插件,可以使用lua语言写PostgreSQL的存储过程和函数,使用lua语言有如下几个好处,#### 可以大大提升存储过程的性能,特别是循环的性能。#### 在PostgreSQL中数组或一些json对象都是不可变的,如往数组或json对象中添加元素时,需要把拷贝源对象而生成一个新对象,导致很大的开销。而使用lua语言的...

weixin_39650756的博客 399

GEE生物量预测:利用多源遥感数据和随机森林算法RF构建地上生物量(AGB)预测模型,并实现未来年份的生态变化模拟(大面积生物量反演)

数据融合策略:整合5类遥感产品(AGB、NDVI、LAI、土地覆盖、地形)时序特征构建:采用生长季中值法降低云污染影响机器学习优化分层采样保证数据代表性80棵决策树平衡精度与效率预测可靠性基准期R²达0.76需结合地面实测数据校正。

此星光明博客 419

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

PostgreSQL 11 preview - jsonb_plpython, jsonb_plperl 插件, PG类型jsonb与pyton,perl程序类型的相互转换...

标签 PostgreSQL , plpython , perl , jsonb , 存储过程 , 函数 , TRANSFORM , SQL类型与编程语言内部类型相互转换 , 增强 , 11 背景 PostgreSQL 支持多种内部存储过程语言,不同的语言对数据类型的支持,名字,定义可能不一样。为了让编程语言、数据库相互之间能够识别对方的类型,有一个M...

weixin_34239592的博客 274

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

野牛的第五篇-存储过程

存储过程(Stored Procedure)是一组预先编译并存储在数据库中的 SQL 语句集合,它可以:接受输入参数执行数据操作(DML)和事务控制不强制要求返回值(与函数不同)通过 CALL 语句调用。

m0_59510704的博客 1578

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

pg使用python编写存储过程_PostgreSQL PL / Python:在virtualenv中调用存储过程

事实证明,有一种方法可以做到这一点。从版本1.6或那里开始,virtualenv附带一个脚本activate_this.py,可用于设置现有的解释器以访问该特定的virtualenv。exec(open('/Some/VirtualEnv/Directory/myvirtualenv/bin/activate_this.py').read(),dict(__file__='/Some/Virtua...

weixin_39976748的博客 205

PostgreSQL - 函数与存储过程的性能优化技巧

PostgreSQL 函数与存储过程性能优化摘要 🚀 PostgreSQL 函数与存储过程是业务逻辑下沉的关键组件,但不当使用会导致性能问题。本文总结核心优化技巧: 1️⃣ 区分函数与存储过程 函数必须返回值,可嵌入SQL;存储过程无返回值,支持事务控制(PostgreSQL 11+) 2️⃣ 选择合适语言 性能排序:SQL函数 > C函数 > PL/pgSQL > 其他语言 简单逻辑用SQL函数,复杂业务用PL/pgSQL 3️⃣ 正确设置函数波动性 IMMUTABLE(纯计算)、ST

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

python文件存储过程_从PostgreSQL存储过程导入python文件

本问题已经有最佳答案,请猛点这里访问。PostgreSQL存储过程中可能有python代码。例如:CREATE FUNCTION someProc()RETURNS void AS $$# Some Python3 code...$$ LANGUAGE plpython3u;但是如何从代码中包含一个python文件呢?PostgreSQL中运行的python的当前目录是:>>> ...

weixin_39588104的博客 349

PostgreSQL 数据库扩展语言编程 之 plpgsql - 1

标签 PostgreSQL , plpgsql , server programming , 存储过程 , 函数 , UDF , create language , plpython , pljava , plr , plperl , pltcl 背景 PostgreSQL是一个开放的数据库,开发性表现在支持自定义数据类型、索引方法、索引、操作符、聚...

weixin_34250434的博客 1105

pg使用python编写存储过程_PL/Python PostgreSQL 存储过程语言(花架子)

总有一天,我要把这样的文章,删掉,统统删掉,I Hate PG!html 安装呢是在编译的过程当中选择python./configure --with-python[root@laptop]# ./configure --help |grep python--with-python build Python modules (PL/Python)[root@]#具体能够使用以下...

weixin_39984098的博客 516

pg使用python编写存储过程,PostgreSQL PL / Python:在virtualenv中调用存储过程

When I call a PostgreSQL PL/Python stored procedure in my Python application, it seems to be executed in a separate process running as user postgres. So far, this only had the side effect that I had t...

weixin_33945685的博客 175

openGauss SQL语法 —事务管理

示例10:不支持带有IMMUABLE以及SHIPPABLE的存储过程调用commit/rollback,或调用带有commit/rollback语句的存储过程。示例9:不允许Trigger的存储过程包含commit/rollback语句,或调用带有commit/rollback语句的存储过程。示例3:支持在事务块里调用含有COMMIT/ROLLBACK的存储过程,即通过/BEGIN/START/END等开启控制的外部事务。示例16:存储过程中使用保存点回退到存储过程外部定义的保存点。

weixin_53596073的博客 1024

CentOS7 yum 安装 PostgreSQL(11) 并启用 python3编写存储过程(Python3

CentOS7 yum PostgreSQL(11) 并启用 python3编写存储过程(Python3.6) 一、安装python3.6 下载Python3.6.6.tgz 至 /tmp 下 [root@localhost tmp]# wget -c https://www.python.org/ftp/python/3.6.6/Python-3.6.6.tgz 解压 Python3.6...

Dolphinsz的博客 985
上一篇: PostgreSQL sequence问题
下一篇: plpython写的一个存储过程函数
pythoner
博客等级 码龄18年 15粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值