flask+echarts+openGauss和mysql的区别

举报
wuyicom 发表于 2021/11/22 23:44:22 2021/11/22
【摘要】     上一篇已经成功把mysql的基础数据表shares_basic迁移到openGauss上,现在修改python程序,使得openGauss替换mysql能搭配flask+echarts做数据大屏可视化。    1安装psycopg2和SQLAlchemypip install psycopg2-binarypip install SQLAlchemy==1.4.26修改采集股票数据到...

    上一篇已经成功把mysql的基础数据表shares_basic迁移到openGauss上,现在修改python程序,使得openGauss替换mysql能搭配flask+echarts做数据大屏可视化。

    1安装psycopg2和SQLAlchemy

pip install psycopg2-binary

pip install SQLAlchemy==1.4.26

修改采集股票数据到openGauss的脚本test.py。

import pandas as pd

from sqlalchemy import create_engine

engine = create_engine('postgresql://wuyi:xxxxx@kafka1.wuyi.com:26000/share2', charset='utf8')

sql1 = "select * from test1.shares_basic"

da0 = pd.read_sql(sql1 , engine)

print(da0)

运行后报错,如下图所示:

原因是mysql支持charset,而openGauss不支持,只支持client_encoding,把charset修改为client_encoding即可。

    2当把处理好的数据写入到shares_wide表时,运行报错如图所示:

提示wuyi这个用户没有schema public的权限,原本想是指定test1的schema来操作,找了很多资料测试都无法解决这个问题。在https://www.modb.pro/db/28397?from=singlemessage 有讲述到openGauss默认对普通用户不开放public模式的权限。这样就可以通过给用户wuyi授予schema public的权限来解决这个问题。

share2=> \c share2 omm

share2=# grant all on schema public to wuyi;

share2=# \c share2 wuyi

在执行test.py脚本,成功把数据写入到public.shares_wide表中。如图所示:

因为public.shares_wide是宽表,而使用的云服务器的容量有限(只有40G),所以只是作为测试,后续的开发不会使用这张表。

    3对比pymysql连接mysql和psycopg2连接openGauss的区别。

def get_conn():

# conn = pymysql.connect(                          # 使用pymysql连接mysql

conn = psycopg2.connect(                          # 使用psycopg2连接openGauss

host="kafka1.wuyi.com",

user="wuyi",

password="xxxxx",

# db="share2",                                               #  mysql

database="share2",                                        # openGauss和mysql

# charset="utf8",                                             #  mysql

client_encoding='utf8',                                      # openGauss

port=26000

)

# 创建游标:

cursor = conn.cursor()

return conn, cursor

特别注意一点:openGauss不能像mysql那样使用db=”share2”表示数据库名,否则会报错。应该改为database=“share2”。如图所示:

    4因云服务器配置低原因,测试过3秒间程序可以走完整个流程,低于3秒数据展示变动的效果跟3秒一样。之前想使用while永久循环,每隔3秒检测任务进程是否在运行,但是发现使用循环太慢,达不到效果。还是crontab定时任务:

指定时间每3秒更新一次数据

* 10,13,14 * * 1-5 /home/wuyi/miniconda2/envs/wuyi/bin/python3 /opt/script/ sharegauss.py

* 10,13,14 * * 1-5 sleep 3; /home/wuyi/miniconda2/envs/wuyi/bin/python3 /opt/script/sharegauss.py

* 10,13,14 * * 1-5 sleep 6; /home/wuyi/miniconda2/envs/wuyi/bin/python3 /opt/script/sharegauss.py

第1个*表示分钟,10,13,14是第2个*表示小时,第3个*表示天数,第4个*表示月份,1-5是第5个*表示星期,sleep 3表示每隔3秒唤醒一次(即执行一次)。

现在执行一次脚本/home/wuyi/miniconda2/envs/wuyi/bin/python3 /opt/script/sharegauss.py 执行过程没提示,即为执行成功,如图所示:

    5之前还出现过一个问题,就是密码使用错误,导致采集数据时,出现频繁连接openGauss,导致账户被锁。如图所示:

解决的办法:使用omm登录数据库,并使用命令修改为其解锁。命令如下:

gsql -d postgres -p 26000 -r

alter user wuyi account unlock;

    通过这次对数据库的变更和使用python连接mysql和openGauss的对比,从而对openGauss有了进一步的了解。同时在采集和处理数据后使用sqlalchemy写入openGauss里面,而后台使用psycopg2来获取openGauss的数据。感兴趣的可以打开http://www.wuyicom.top:5000/ 查看实时股票数据大屏展示效果。

    转本人的博客: https://www.modb.pro/db/174198












【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。