You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python连接Oracle用Plotly Dash实现柱状图仪表盘可视化咨询

问题结论

完全可以直接调用Oracle数据库中的数据,实现Plotly Dash的柱状图类仪表盘效果。你现有代码存在几个逻辑和用法错误,修正后即可正常运行。

现有代码的常见问题
  • 字符集配置生效顺序错误:os.putenv('NLS_LANG', '.UTF8') 必须放在import cx_Oracle语句之前执行,否则无法解决中文乱码问题
  • DataFrame列引用错误:通过pd.read_sql直接读取的结果会自带SQL查询返回的列名,你写的df[0]是无列名数据的整数索引写法,仅适用于cursor.fetchall()转换的空列名DataFrame场景
  • Dash部分数据读取逻辑错误:pd.read_sql第一个参数必须是合法SQL语句,不能直接传入字段名字符串;要实现柱状图需要调用go.Bar组件,而非散点图用的go.Scatter
  • 存在冗余代码:未实际使用的sqlite3、sqlalchemy、cursor对象可以直接删除,减少不必要的资源占用
修正后可运行的代码
# 字符集配置必须放在cx_Oracle导入前
import os
os.putenv('NLS_LANG', '.UTF8')

import dash
import dash_core_components as dcc
import dash_html_components as html
import plotly.graph_objs as go
import pandas as pd
import cx_Oracle

# 建立Oracle数据库连接
dsn = cx_Oracle.makedsn('localhost', 1521, 'xe')
db_conn = cx_Oracle.connect('dbid', 'dbpw', dsn)

# 一次性查询需要的维度、指标字段,不要拆分多次查询
query = 'select category, fee from tablename'
df = pd.read_sql(query, db_conn)

# 数据读取完成后及时关闭数据库连接,避免占用连接池资源
db_conn.close()

# 初始化Dash应用
app = dash.Dash()

app.layout = html.Div([
    dcc.Graph(
        id='fee-stat-bar',
        figure={
            'data': [
                go.Bar(
                    # Oracle默认返回大写字段名,注意和实际查询结果匹配
                    x=df['CATEGORY'],
                    y=df['FEE'],
                    marker={'color': 'skyblue'}
                )
            ],
            'layout': go.Layout(
                title='分类费用统计柱状图',
                xaxis={'title': '费用分类'},
                yaxis={'title': '金额'},
                bargap=0.2
            )
        }
    )
])

if __name__ == '__main__':
    app.run_server(debug=True)
落地注意事项
  • Oracle查询默认返回全大写字段名,如果你的SQL没有给字段起小写别名,读取DataFrame列时必须用大写字段名,否则会触发KeyError
  • 如果需要做动态刷新的仪表盘,可以把数据查询逻辑放到Dash回调函数中,按设定的时间间隔触发查询,更新图表数据
  • 数据量较大时建议先在Oracle侧完成聚合、过滤计算,再把结果返回给Python,不要拉取全量原始数据到本地处理,能大幅提升加载速度
  • 生产环境部署时建议用SQLAlchemy配合连接池管理Oracle连接,不要手动频繁创建、销毁连接

内容的提问来源于stack exchange,提问作者start

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 03:16:06