关于一个django工程如何与达梦数据库连接的全程总结

发布时间 2023-09-29 11:06:30作者: 言行一

关于一个django工程如何与达梦数据库连接的全程总结

1.达梦数据库的安装(win、图形化工具)

参考官方技术文档 或 笔者以往博客:
安装前准备 | 达梦技术文档 (dameng.com)

达梦 - 言行一 - 博客园 (cnblogs.com)

2. DM 管理工具的基本使用:

值得注意,达梦软件的观感与我们常使用的navicat等主流数据库管理软件,不管是视图呈现上还是具体操作逻辑上大不相同;

若只需连接至自己工程可跳过基本概念的介绍;

抽象导图:

image-20230928205737142
表空间的建删

表空间”理解为文件夹,默认会自动存在以下表空间:

  • SYSTEM:系统表空间,存放数据字典信息,用户不可以在这个表空间下创建表和索引
  • ROLL:回滚表空间,存放回滚数据,是由达梦数据库自动维护,用户无需干预。该表空间用来存放事务运行过程中执行 DML 操作之前的值,从而为访问该表的其他用户提供表数据的读一致性视图。
  • TEMP:临时表空间,存放临时数据。当用户的 SQL 语句需要磁盘空间来完成某个操作时,达梦数据库会从 TEMP 表空间分配临时段。如果创建索引、无法在内存中完成排序操作时、SQL 语句中间结果集以及用户创建的临时表等都会用到 TEMP 临时表空间。
  • MAIN表空间:默认表空空间,达梦数据库系统默认的表空间,表空间在初始化库的时候,就会自动创建一个大小为 128M 的数据文件 MAIN.DBF,如果用户创建数据对象不指定存储位置,默认存放到main

(表空间相当于文件夹,这里给出命令行 / 图形化创建方法)

--创建表空间
CREATE TABLESPACE  TEST DATAFILE 'TEST.DBF' SIZE 300;
--删除表空间
DROP TABLESPACE TEST;

打开“DM服务查看器”(此软件和管理工具一同绑定被安装),确定DmService是开启的:

image-20230928203905594

打开DM管理工具并输入自己的用户名及其口令以登录、连接至LOCALHOST(SYSDBA)服务

image-20230928204227746

sql的使用:

image-20230928205507329

创建一个用户来管理(绑定)该个表空间,关于“用户”请看下一内容

用户的管理

与表空间同理,默认哪些用户 以及 如何通过sql命令行创建用户

  • SYS-内置管理账号,不能登录数据库
  • SYSDBA-管理员
  • SYSAUDITOR-审计员
  • SYSSSO-安全版特有,安全员
--创建普通用户
create user TEST identified by "123456789" default tablespace TEST default index tablespace TEST;
--赋予普通用户权限
grant "RESOURCE","PUBLIC","DBA","VTI" to TEST;
--级联删除用户下的所有对象
drop user TEST cascade;

注意:在创建用户时,以图形化方法举例,是可以指定其管理哪个表空间的

image-20230928202703469
模式的建删

模式相当于数据库,里面创建并存放

也是要注意与用户的绑定;“配置登录默认模式、“模式切换“,都是某一个用户自己建立的多个模式之间切换,模式和用户不存在授权的概念,也不能授权,只有属于和不属于;同时,我们所有的模式切换,是不能跨到其他用户下面去的。

达梦的用户和模式是什么?

达梦的用户,是数据库实例里一个逻辑概念。它是一个操作空间、一个逻辑空间,在这个空间内,可以建立表结构,部署应用。

比如说,一个数据库实例上,我们新建2个用户A and B,每个用户独立部署一个应用系统。

说明: 1)每个用户独立部署一个模块(每个模块,有自己独立的一套表结构)。
2)大家尽量不要在一个实例中,攒太多的系统;低耦合的时代,这样子不好。

至此,我们把达梦理解成一个单用户单模式的数据库即可,但:

1)实际上,达梦上面,承载业务逻辑的不是用户,而是模式,我们在新建用户时,系统会自动新建一个和用户名相同的模式,我们所有的操作,都是在“模式”中。
2)而且,达梦一个用户,是可以对应多个模式的(当我们要实现,在一个连接中,切换模式,那么就必须使用单用户多模式的方法)

的创建、删除、查看

image-20230928211634894

删除此表同理,右键并勾选 “级联删除” ;查看则是右键并 “浏览数据”

3. Django 项目接入 dm 数据库

settings的database配置
DATABASES = {
    'default': {
        'ENGINE': 'django_dmPython',
        'NAME': 'DBRMPA',
        'USER': 'SYSDBA',
        'PASSWORD': 'SYSDBA',
        # 'OPTIONS': {'schema': 'DJANGGO'},
        'HOST': '127.0.0.1',
        'PORT': '5236',
    }
}

我的数据库部分如上,注意:
引擎指定达梦,但需要下文 “dmPython的编译※” 完成后进程才可对其识别,

NAME给到数据库内建表的表名,USER、PASSWORD按在管理工具初始设定参数设置,HOST使用本地,PORT指定默认。

解释器中的相关包

笔者所安装且认为必须有的依赖有以下:

Django 3.2.11

django-dmpython 3.0.1

其余与项目有关所需的包可下载文末源码后自行补充

dmPython的编译※

简介:dmPython 是 DM 提供的依据 Python DB API version 2.0 中 API 使用规定而开发的数据库访问接口。使用 Python 连接达梦数据库时需要安装 dmPython。安装完 DM 数据库软件后,在安装路径下的 drivers 目录下,可以找到 dmPython 的驱动源码,由于提供的是源码,需要自己编译安装,下面在 Windows 11下编译安装 dmPython。

环境准备

安装 DM 数据库软件并设置 DM_HOME 环境变量

image-20230928191435379

安装编译工具 Microsoft Visual C++ Build Tools

由微软官方下载Visual Studio:

在 Visual Studio 中安装 C 和 C++ 支持 | Microsoft Learn

选择图示安装项,等待所需组件装载完成即可,后续不用手动再配置

image-20230928192317539
正式编译

在由浏览器安装包所下载到本地的达梦数据库应用位置,找到drivers目录,

进到dmPython源码的目录(命令提示符cd D:\dmdbms\drivers\python\dmPython 或 直接在dmPython文件夹内右键进入终端)执行:

python setup.py install
image-20230928192916176

上图安装结束后使用 pip list 再次确保有无 dmpython 2.3 此包

在终端进入python找接下来另一个所需的路径:

python 
import sys 
sys.path

执行结果中找到 类似 “D:\Users\Admin\AppData\Local\Programs\Python\Python39\lib\site-packages\dmpython-2.3-py3.9-win-amd64.egg” 的位置,这个被搜索出来的路径存在于你的环境最初安装Python的目录之中。

安装达梦的位置,dmdbms的drivers里有dpi,把此dpi的所有内容拷贝至上述 这个被搜索出来的路径 (即 安装python的地方) :
image-20230928194005284

验证成功

任取一处终端内,先进入python,编写以下测试代码:

import dmPython
conn=dmPython.connect(user='SYSDBA',password='SYSDBA',server= '192.168.201.118',port=5236)
cursor = conn.cursor()
cursor.execute('select username from dba_users')
values = cursor.fetchall()
print(values)
cursor.close()
conn.close()
image-20230928194238294

如图输出了你所设置的数据库的用户名则说明编译成功

在执行到此步的时候:

import dmPython

conn = dmPython.connect(user='SYSDBA', password='SYSDBA', server='192.168.201.118', port=5236)

dmPython.Database

Error: [CODE:-70028]创建SOCKET连接失败 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "", line 1, in SystemError: <class 'dmPython.Connection'> returned a result with an exception set

错误消息 "[CODE:-70028]创建SOCKET连接失败" 表明连接到数据库时发生了套接字连接问题。这可能是由于以下原因之一引起的:

  1. 网络问题:可能存在网络连接问题,导致无法连接到指定的数据库服务器。请确保服务器地址和端口号是正确的,而且你的计算机能够访问数据库服务器。
  2. 数据库服务器未启动:如果数据库服务器未运行,你将无法连接到它。确保数据库服务器已经启动并正在运行。
  3. 防火墙或安全设置:防火墙或安全设置可能会阻止连接。检查你的防火墙设置,确保允许从你的计算机连接到指定端口的流量。
  4. 端口被占用:端口 5236 是否被其他应用程序占用?如果是的话,你可以尝试更改端口号或确保释放该端口。
  5. 数据库配置错误:检查数据库服务器的配置,确保它监听指定的 IP 地址和端口号。还要确保允许远程连接。
  6. dmPython 版本不兼容:确保你使用的 dmPython 版本与数据库服务器版本兼容。有时,不匹配的版本可能导致连接问题。

针对这些问题,你可以尝试以下解决措施:

  • 检查网络连接,确保你的计算机可以与数据库服务器通信。
  • 确保数据库服务器正在运行,并且监听了指定的 IP 地址和端口。
  • 检查防火墙设置,确保允许流量通过指定的端口。
  • 如果可能,尝试更改端口号,以确保没有冲突。
  • 确保使用的 dmPython 版本与数据库服务器版本兼容。
测试输入

测试前端数据输入是否传进dm数据库

运行后端
image-20230929103740989
运行前端
image-20230929103426271
进入页面实操
image-20230929103306256

给出此项目的源文件链接:https://pan.baidu.com/s/1EN3bWeRtdddumeUSvxaXjg?pwd=wu18 提取码:wu18