【问题标题】:oracle sql database linkage and python plotly dashboard graph visualizationoracle sql 数据库联动和python plotly 仪表板图形可视化
【发布时间】:2022-07-01 23:00:05
【问题描述】:
import dash
import dash_core_components as dcc
import dash_html_components as html
import plotly.graph_objs as go
import numpy as np
import pandas as pd
import cx_Oracle
import os
from sqlite3 import connect
import sqlalchemy

os.putenv('NLS_LANG', '.UTF8')

dsn = cx_Oracle.makedsn('localhost', 1521, 'xe')
db_conn = cx_Oracle.connect('dbid', 'dbpw', dsn)


cursor = db_conn.cursor()
# cursor.execute('select a, b from tablename')

query = 'select a, b from tablename'

#row = cursor.fetchall()
#df = pd.DataFrame(row)                  

df = pd.read_sql(query, db_conn)
df.index = list(df[0]) # category
df.plot(kind='bar', color='skyblue')
print(df)

'''
app = dash.Dash() 

# Creating DATA
random_x = pd.read_sql('category', db_conn)
random_y = pd.read_sql('fee', db_conn)

#random_x = np.random.randint(1, 101, 100)
#random_y = np.random.randint(1, 101, 100)

app.layout = html.Div([dcc.Graph(id='scatterplot',
                                 figure={'data':[go.Scatter(
                                     x=random_x,
                                     y=random_y,
                                     mode='markers',
                                     marker={
                                         'size':12,
                                         'color':'rgb(51,204,153)',
                                         'symbol':'pentagon',
                                         'line':{'width':2}
                                     }
                                 )],
                                         'layout':go.Layout(title='My Scatterplot',
                                                            xaxis={'title':'Some X title'})}
                                 ),
                        dcc.Graph(id='scatterplot2',
                                 figure={'data':[go.Scatter(
                                     x=random_x,
                                     y=random_y,
                                     mode='markers',
                                     marker={
                                         'size':12,
                                         'color':'rgb(200,204,53)',
                                         'symbol':'pentagon',
                                         'line':{'width':2}
                                     }
                                 )],
                                         'layout':go.Layout(title='Second Plot',
                                                            xaxis={'title':'Some X title'})}
                                 )
                       ])

if __name__ == '__main__':
    app.run_server()'''

我正在尝试连接 oracle sql 数据库并可视化 python plotly 仪表板图。

我尝试了几次讲座和谷歌搜索,但找到答案比我想象的要难,所以我问了这个问题。

是否可以通过应用oracle sql db数据以类似于仪表板的形式将条形图可视化?

【问题讨论】:

  • 我会让一个阴谋或破折号的专家回答。在 Oracle 方面,您只需要他们需要的任何格式的数据。一旦您可以绘制例如一些固定数据值,那应该很简单。不相关:(1)连接时使用关键字参数。这在最新的驱动程序中是强制性的 (2) 使用 NLS_LANG 设置字符集在最近的 cx_Oracle 中没有用,因为始终使用 UTF-8。 (3) 使用最新的驱动,从 cx_Oracle 重命名为 python-oracledb,见release announcement

标签: python oracle plotly plotly-dash


【解决方案1】:

这里有一个简单的例子可以帮助你。

import matplotlib.pyplot as plt
import time
import cx_Oracle as oracledb
import platform
import os

if platform.system() == "Darwin":
    oracledb.init_oracle_client(lib_dir=os.environ.get("HOME")+"/Downloads/instantclient_19_8")
elif platform.system() == "Windows":
     oracledb.init_oracle_client(lib_dir=r"C:\oracle\instantclient_19_14")

username = os.environ.get("PYTHON_USERNAME")
password = os.environ.get("PYTHON_PASSWORD")
connect_string = os.environ.get("PYTHON_CONNECTSTRING")

connection = oracledb.connect(user=username, password=password, dsn=connect_string)

with connection.cursor() as cursor:

    cursor.execute("""
        begin
          begin
            execute immediate 'drop table mytab';
            exception when others then
              if sqlcode <> -942 then
                raise;
              end if;
          end;

          execute immediate 'create table mytab (id number, data number)';

          insert into mytab (id, data) values (1, 10);
          insert into mytab (id, data) values (2, 4);
          insert into mytab (id, data) values (3, 34);
          insert into mytab (id, data) values (4, 12);
          insert into mytab (id, data) values (7, 9);
        end;""")

    y = []
    for v, in cursor.execute("select data from mytab order by id"):
        y.append(v)


print("Plot is:")
x = list(range(1, len(y)+1))
#plt.xticks(x)                         # for points
#plt.plot(x, y, "o", label="My data")  # for points
plt.bar(x, y, label="My data")         # for bars
plt.xlabel('Row number')
plt.ylabel('Data value')
plt.legend(loc="upper left")
plt.show()

输出如下:

【讨论】:

  • 非常感谢。我会记住这一点。通过修改我的代码来实现仪表板是否困难?
猜你喜欢
  • 2015-05-25
  • 2012-12-13
  • 2023-02-21
  • 1970-01-01
  • 2019-01-10
  • 2020-09-27
  • 2016-09-11
  • 2019-11-01
  • 2015-07-08
相关资源
最近更新 更多