flask后端与国产达梦数据库的联合

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、安装

官方下载达梦安装包

dmPython安装官网教程

SQLAlchemy

二、docker安装达梦数据库

官网docker安装达梦数据库,按这个官网步骤来就可以安装成功
其中一些解释
docker run -d -p 30236:5236 --restart=always --name dm8_test --privileged=true -e PAGE_SIZE=16 -e LD_LIBRARY_PATH=/opt/dmdbms/bin -e EXTENT_SIZE=32 -e BLANK_PAD_MODE=1 -e LOG_SIZE=1024 -e UNICODE_FLAG=1 -e LENGTH_IN_CHAR=1 -e INSTANCE_NAME=dm8_test -v /data/dm8_test:/opt/dmdbms/data dm8_single:dm8_20230808_rev197096_x86_rh6_64

-p 30236:5236: 这个选项指定了容器内部端口和主机端口之间的映射关系。在这里,容器内部的端口是 5236,而主机上的端口是 30236。这样一来,主机上的流量会被导向到容器内部的端口上。
--name dm8_test: 这个选项指定了容器的名称为 dm8_test
-v /data/dm8_test:/opt/dmdbms/data: 这个选项用于将主机上的目录 /data/dm8_test 映射到容器内部的 /opt/dmdbms/data 目录,以便容器可以访问主机上的数据。
dm8_single:dm8_20230808_rev197096_x86_rh6_64: 这是所使用的 Docker 镜像的名称和标签,用于从 Docker Hub 或本地仓库中获取镜像并创建容器。在这里,dm8_single 是镜像名称,dm8_20230808_rev197096_x86_rh6_64 是镜像的标签。

命令行进入达梦数据库

#进入达梦容器里
docker exec -it dm8_test bash
#切换到/opt/dmdbms/bin目录
cd /opt/dmdbms/bin
#然后执行登录命令,./disql 是达梦数据库的命令行工具,用于与数据库进行交互。SYSDBA 是管理员用户名,而 SYSDBA001 是管理员的密码。Docker镜像中数据库默认用户名/密码为 SYSDBA/SYSDBA001
./disql SYSDBA/SYSDBA001

此时如下图:
在这里插入图片描述
现在就已经进入sql操控SYSDBA管理员用户达梦数据库的界面
在这里插入图片描述
这个目录下的data就是存放的表单的数据,log就是日志

python中连接操控数据库:

import dmPython
import pandas as pd
# 建立数据库连接,注意这个ip是docker主机的ip,因为docker默认会绑定其主机的一张网卡
conn = dmPython.connect(user='SYSDBA', port=30236, server='服务器ip', password='用户密码')
# 获取游标
cursor = conn.cursor()
conn.commit()  # 记得要提交你的更改
# 关闭游标
cursor.close()
# 关闭连接
conn.close()

三linux安装达梦数据库

dm8下载

四、达梦和mysql区别

mysql数据库非表空间形式,数据库(Database)是用来存储数据的容器。在MySQL中,每个数据库可以包含多张表以及其他数据库对象。在MySQL中,用户是被授予访问数据库服务器的权限的实体,当一个用户被创建时,需要指定该用户可以访问的数据库以及用户在该数据库上的权限
在这里插入图片描述
达梦是表空间形式,

在达梦数据库的概念中,数据库用户与表空间是一一对应的,即A用户默认只能操作模式A表空间A)。另一种解决方案,则是将用户名与模式名对应,如登陆的用户是SYSDBA,则操作的模式也是SYSDBA。在达梦数据库中,表空间是用来管理数据库物理存储结构的逻辑单元。它定义了数据文件的存储位置和分配方式,包括数据文件的大小、增长方式等。表空间可以用于组织和管理数据库中的数据对象,如表、索引等。

达梦上面,承载业务逻辑的不是用户,而是模式,我们在新建用户时,系统会自动新建一个和用户名相同的模式,我们所有的操作,都是在“模式”中。
2)而且,达梦一个用户,是可以对应多个模式的(当我们要实现,在一个连接中,切换模式,那么就必须使用单用户多模式的方法)。但是一个模式一定有一个唯一的所有者。
在达梦数据库中,用户在其默认模式(与用户名相同的模式)下创建的数据库对象(如表、索引等)将会使用该用户的默认表空间作为物理存储结构。
总结:用户和模式一对多,用户下会有一个重名的默认模式,表空间是用户存储数据的地方,表空间下有一个用户属性可以查看是哪个用户的表空间!

五、flask后端连接达梦

把这个config加载到app就行

  class Config:
    #  默认数据库(主数据库)
    SQLALCHEMY_DATABASE_URI= 'dm+dmPython://用户名:密码@ip:端口'

操控达梦数据库的记录

达梦数据库的DELETE语句默认是逻辑删除,即将数据标记为已删除,但并不会物理删除数据。被标记为已删除的数据仍然存在于数据库中,只是在查询时不会被显示出来。这种方式可以保留数据的完整性和一致性,同时也方便了数据的恢复和审计。
例如:DELETE FROM operation之后select * from operation在达梦数据库中查不到数据,但是用python查询的时候却能查到被删除的数据,# cursor.execute(“SELECT * FROM operation”)

如果需要物理删除数据,可以使用达梦数据库的TRUNCATE语句或者DROP语句。TRUNCATE语句可以快速删除表中的所有数据,但是不会删除表本身,而DROP语句可以删除整个表,包括表结构和数据。

六、遇到的bug

vs code python环境和cmd终端python环境不一致

一切装好之后发现flask端通过SQLAlchemy还是连接不上达梦,cmd终端python环境下输入pip list观察包如下:
包已经正确安装并版本号一致
包已经正确安装并版本号一致!而且观察到vs code python环境和cmd终端python环境一致。
在vs pip list发现:
在这里1插入图片描述
vs终端里找不到方言SQLAlchemy_dm,就很奇怪,估计是卡bug了?不太懂
之后通过cd到那个方言SQLAlchemy_dm路径,直接安装在了vs所配python环境下,成功连接!

列名为‘时间’的报错

在这里插入图片描述
达梦发现无法解析该列名,在mysql里完全没问题,列名改为time,TIME都不行,改为TIME_之后好了。

  • 17
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值