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

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

时间:2023-09-29 11:12:14浏览次数:63  
标签:数据库 用户 django 全程 空间 安装 达梦 dmPython

关于一个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

标签:数据库,用户,django,全程,空间,安装,达梦,dmPython
From: https://www.cnblogs.com/yansz001216/p/17736855.html

相关文章

  • Sql(多级分销)无限极数据库表设计方法
    相信有过开发经验的朋友都曾碰到过这样一个需求。假设你正在为一个新闻网站开发一个评论功能,读者可以评论原文甚至相互回复。这个需求并不简单,相互回复会导致无限多的分支,无限多的祖先-后代关系。这是一种典型的递归关系数据。对于这个问题,以下给出几个解决方案,各位客......
  • 数据库
    数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据。我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理大数据量。所......
  • openGauss学习笔记-83 openGauss 数据库管理-内存优化表MOT管理-内存表特性-MOT使用内
    openGauss学习笔记-83openGauss数据库管理-内存优化表MOT管理-内存表特性-MOT使用内存和存储规划本节描述了为满足特定应用程序需求,在评估、估计和规划内存和存储容量数量时,需要注意的事项和准则,以及影响所需内存数量的各种数据,例如计划表的数据和索引大小、维持事务管理的内存......
  • 16 | 数据库安全:数据库中的数据是如何被黑客拖取的?
    Redis安全买了个阿里云,上面yuminstall安装了个redis,没有设置密码,过两天就收到了阿里云的安全告警信息,top了下,看到cpu飙升到了290%,进程kill不掉,最后发,/var/spool/cron下有个redis文件,跑定时任务,立马将redis停止 防护首先,从认证上来说,Redis提供了最简单的密码认证功能。其......
  • Android GreenDao数据库使用
    GreenDao介绍GreenDao是一个开源的AndroidORM嵌入式关系数据库,通过将Java对象映射到数据库表(称为ORM,“对象/关系映射”),使用一个简单的面向对象的API来存储、更新、删除和查询Java对象。GreenDao特点●最佳性能(可能是Android中最快的ORM),基准测试也是开源的;●......
  • PostgreSQL数据库事务系统——获取virtual transaction id
    如果一个事务没有进行INSERT、UPDATE、DELETE操作,那么就步会分配事务ID,但事务仍然用一个虚拟事务ID代表自己。虚拟事务ID由两部分组成,第一部分是BackendID,另一个是每个会话自己维护的本地事务ID计数器。通过两部分组合,能保证这个虚拟事务ID的唯一性。在PostgreSQL数据库IPC——SI......
  • MySql 数据库 对表中数据的操作
    对表中数据的操作--向表中插入数据insert[ignore]into表名(字段列表)values(值列表)usescoredb;showtables;descdepartments;insertintodepartments(id,deptno,deptname,director,location)values(1,101,"张xx","张院长","新乡"......
  • Django实战项目-学习任务系统-需求说明
    一,需求说明在我最近的阅读中,我深深被一些关于智能或系统的小说吸引。这些小说的主角意外获得某种神秘的智能或系统,然后通过完成系统发布的各种任务,逐渐提升自己的知识和能力。即使是普通的屌丝,也能在系统的管理和奖励下,一步步实现自己的梦想。这种情景让我深感兴趣,于是我......
  • 数据库中什么是内连接、外连接、交叉连接、笛卡尔积;MySQL 的内连接、左连接、右连接有
    一、什么是内连接、外连接、交叉连接、笛卡尔积呢内连接(innerjoin):取得两张表中满足存在连接匹配关系的记录;外连接(outerjoin):不只取得两张表中满足存在连接匹配关系的记录,还包括某张表(或者两张表)中不满足匹配关系的记录。交叉连接(crossjoin):显示两张表所有记录一一对应,没有匹配关系......
  • 吉利汽车以智算中心获“2023 IDC中国未来企业大奖”,浪潮信息全程助力!
    近日,全球领先的IT市场研究和咨询公司IDC公布了“2023IDC中国未来企业大奖”优秀奖获奖名单。吉利汽车打造的“星睿云·智算中心”项目,凭借全球领先的的大规模AI计算平台以及敏捷高效的软硬协同系统设计,能够有效支撑AI大模型技术创新与应用,为汽车制造业的智能化转型提供了具有示范......