flask+echarts+openGauss和mysql的区别
上一篇已经成功把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
- 点赞
- 收藏
- 关注作者
评论(0)