达梦

达梦

达梦和navicat:
"DM管理工具"和"Navicat"都是数据库管理工具,功能类似,用于管理和操作数据库,包括连接数据库、执行SQL查询、查看和管理数据库对象、数据导入导出等。

"DM管理工具"是由达梦官方提供的管理工具,专门用于管理达梦数据库。而"Navicat"是一家独立软件开发商提供的,它支持多种数据库产品,包括但不限于MySQL、PostgreSQL、SQL Server、Oracle等。

如果你使用的是达梦数据库,"DM管理工具"可能提供更好的对达梦数据库的支持和优化。如果你还需要连接和管理其他类型的数据库,"Navicat"可能会更适合,因为它支持多种数据库产品。


版本区别

  • DM Standard Edition 标准版

政府部门、中小型企业及互联网/内部网应用提供;

  • DM Enterprise Edition 企业版

为高端应用提供了数据复制、数据守护等高可靠性、高性能的数据管理能力,完全能够支撑各类企业应用;

  • DM Security Edition 安全版

拥有企业版的所有功能,并重点加强了其安全特性,引入强制访问控制功能;

采用数据库管理员 (DBA)、数据库审计员 (AUDITOR)、数据库安全员 (SSO)、数据库对象操作员 (DBO) 四权分立安全机制;

适合于对安全性要求更高的政府或企业敏感部门选用;

对比项 标准版 企业版 安全版
最大连接数 25 无限制
使用时间 无限制 无限制
最大存储容量 500 GB 无限制
存储过程调试功能 不支持 支持 支持
XML 支持 不支持 支持 支持
JSON 支持 不支持 支持 支持

数据库安装

下载地址:产品下载 | 达梦数据库 (dameng.com)

执行exe如下:

image-20230801103420216

按默认步骤进行如下:

image-20230801103942747

随后进入配置及初始化环节,现以DAMENG_test_0801为测试用数据库名,以DMSERVER_test_0801为测试用实例名;

然后选择默认配置,默认口令与登录名一致,如下图:

image-20230801104659793

作为测试环境,我创建了安装引导里到这里自带的 示例库 BOOKSHOPDMHR,点击完成即可

这里重新把数据库名和实例名改回了默认,因为自定义test的话此处出现证书类报错

image-20230801105111271

数据库工具介绍

服务查看器工具

在安装目录下的D:\Install\DMdatabase\tool内找到dmservice.exe执行,或直接在开始菜单找到,可以开始启动或暂停服务:

image-20230801105647827

其查看器页面如图:可以进行开库关库的操作

image-20230801105906932
管理工具

数据库实例链接

  • 新建连接

创建连接数据库的对象导航,不进行保存,下次开启后需重新连接。

  • 注册连接

创建连接数据库的对象导航,进行保存,下次开启后对象导航存在,可直接进行连接。

下面分别看二者:

image-20230801110116069
新建

点击【新建连接】,输入主机名(IP 地址)、端口(默认 5236)、用户名(默认 SYSDBA)、密码(默认 SYSDBA);

点击【确认】会直接进行数据库连接;

新建操作图示:

image-20230801111116918
注册

输入主机名(IP 地址)、端口(默认 5236)、用户名(默认 SYSDBA)、密码(默认 SYSDBA);

点击【测试】,测试是否连通;

点击【确定】,会连接数据库;

注册操作图如下:

image-20230801110810862

上述完成后,窗口的基本功能如下:

image-20230801111229541



数据库基本操作

创建表空间
表的创建和定义

登录 DM 管理工具,右键表空间模块,点击【新建表空间】,

image-20230801112633623
表的修改

根据项目需要,修改表空间文件、路径、大小、是否自动扩充、扩充上限等信息

表的加密
image-20230801113727560
创建用户
image-20230801114218076
创建数据库对象

此部分未实践



应用程序开发

以下介绍在 Python 开发的时候,如何使用 Python 快速连接达梦数据库

dmPython

dmPython 是 DM 提供的依据 Python DB API version 2.0 中 API 使用规定而开发的数据库访问接口。使用 Python 连接达梦数据库时需要安装 dmPython


Win下编译和安装 dmPython
安装 DM 数据库软件
设置 DM_HOME 环境变量

dmPython 源码依赖 DM 安装目录中提供的 include 头文件,编译安装前需要检查是否安装 DM 数据库软件(前文已安装),并设置 DM_HOME 环境变量(一般已经默认):

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

Visual Studio: 面向软件开发人员和 Teams 的 IDE 和代码编辑器 (microsoft.com)网页中,下载此处的:

image-20230801122059606 image-20230801150306114

安装过程较慢,但必须等待此步全部安装后方可进行下一步,不然在命令提示符内安装python setup.py install时会报错error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/

此应用安装好后,选择【启动】以确保电脑上现在具备环境:

image-20230801151542072
编译安装dmpython

安装路径下的 drivers 目录下,找到 dmPython 的驱动源码,我的是在D:\Install\DMdatabase\drivers\python\dmPython

进入到 dmPython 驱动源码目录

cd D:\Install\DMdatabase\drivers\python\dmPython

编译安装 dmPython

python setup.py install
image-20230801151055436 image-20230801151125258

编译安装结束后使用 pip list 命令查看是否安装成功

image-20230801151201956

我的命令提示符内(最新版本应该如下):

image-20230801151637242
查看搜索路径

dmPython 通过调用 DM DPI 接口完成 Python 模块扩展,在其使用过程中,除 Python标准库以外,还需要 DPI 的运行环境

进入 python 解释器查看搜索路径:

python
import sys
sys.path
image-20230801151904665

只需关心方框内最后一个路径D:\\Install\\PYTHON\\Lib\\site-packages\\dmpython-2.4.8-py3.11-win-amd64.egg

将 dpi 目录文件拷贝到路径下

操作如图示

image-20230801152718405

编写测试代码
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-20230801154613595

django框架下的应用开发实例
驱动源码

安装完 DM 数据库软件后,在安装路径下的 drivers 目录下的 python 目录中,可以找到 dmPython 和 Django_dmPython 的驱动源码,由于提供的是源码,需要找到对应版本自行编译安装

image-20230801164716143

编译安装与 django 版本对应的 Django_dmPython,驱动源码与 django 源码的版本对应关系,例如 django317,能适配 django3.1.x 所有版本。

djangoxxx/django_dmPython 下执行命令:python setup.py install

安装django

(使用pip list看是否成功)

新建项目

PyCharm 新建项目 dm_django0801,终端执行:

django-admin startproject mysite

创建一个 mysite 目录,

cd mysite 
python manage.py startapp dm

创建一个 dm 目录

视图

编辑 dm/views.py 文件:

from django.http import HttpResponse 

def index(request):    
	return HttpResponse("Hello, 达梦数据库。 ")
路由

在 dm 目录里新建 urls.py 文件

from . import views
from django.urls import path
urlpatterns = [
    path('', views.index, name='index'),
]

在 mysite/urls.py 文件的 urlpatterns 列表里插入一个 include()。

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('dm/', include('dm.urls')),
    path('admin/', admin.site.urls),
]

启动 Django 自带的简易服务器,验证是否正常工作

在 PyCharm 中打开 Terminal 执行:

python manage.py runserver

浏览器访问 http://127.0.0.1:8000/dm/

image-20230801165425720
数据库配置

编辑 mysite/settings.py 配置文件。

设置时区:

TIME_ZONE='Asia/Shanghai'
USE_TZ=False

设置 DATABASES 设置项:


DATABASES = {
    'default': {
        'ENGINE': 'django_dmPython',  #使用的数据库后端
        'NAME': 'DAMENG',
        'USER': 'SYSDBA',
        'PASSWORD': 'SYSDBA',
        'HOST': '192.168.201.118',
        'PORT': '5236',
        'OPTIONS': {'local_code': 1, 'connection_timeout': 5}
    }
}
模型

编辑 dm/models.py 文件。

class Book(models.Model):
    class Meta:
        db_table = 'PRODUCT'
    PRODUCTID = models.AutoField(primary_key=True,  db_column='PRODUCTID')
    NAME = models.CharField(max_length=100, null=True)
    AUTHOR = models.CharField(max_length=25, null=True)
    PUBLISHER = models.CharField(max_length=50, null=True)
    PUBLISHTIME = models.DateField(null=True)
    PRODUCTNO = models.CharField(max_length=25, null=True)
    SATETYSTOCKLEVEL = models.IntegerField(null=True)
    ORIGINALPRICE = models.DecimalField(max_digits=5, decimal_places=2, null=True)
    NOWPRICE = models.DecimalField(max_digits=10, decimal_places=4, null=True)
    DISCOUNT = models.DecimalField(max_digits=2, decimal_places=1, null=True)
    DESCRIPTION = models.TextField(null=True)
    TYPE = models.CharField(max_length=5, null=True)
    PAPERTOTAL = models.IntegerField(null=True)
    WORDTOTAL = models.IntegerField(null=True)
    SELLSTARTTIME = models.DateField(null=True)
SELLENDTIME = models.DateField( null=True)

把 dm 应用安装到 Django 项目里

在 Django 项目中包 dm 应用,需要在配置类 INSTALLED_APPS 中添加设置。

'dm.apps.DmConfig',
image-20230801165611557
迁移
python manage.py makemigrations dm

其他基本操作
service.py

dm 目录里新建一个 services.py 文件,以实现增、删、改、查四个基本操作。

from .models import Book
  • 查询操作
def fun_get_books():
    books = Book.objects.all() #返回QuerySet
    total_rows=books.count()
    print('查询到'+str(total_rows)+'条记录')
    for book in books:
        print(book.NAME, book.AUTHOR, book.PUBLISHER)
    print('')
  • 增加操作
def fun_insert_book():
    NewBook = Book()
    NewBook.NAME = '水浒传'
    NewBook.AUTHOR = '施耐庵,罗贯中'
    NewBook.PUBLISHER = '中华书局'
    NewBook.PUBLISHTIME = '2005-4-1'
    NewBook.PRODUCTNO = '9787101046137'
    NewBook.SATETYSTOCKLEVEL = '10'
    NewBook.ORIGINALPRICE = '19'
    NewBook.NOWPRICE = '14.3'
    NewBook.DISCOUNT = '7.5'
    NewBook.DESCRIPTION = '''
            《水浒传》是宋江起义故事在民间长期流传基础上产生出来的,吸收了民间文学的营养。
            《水浒传》是我国人民最喜爱的古典长篇白话小说之一。它产生于明代,是在宋、元以来有关水浒的故事、话本、戏曲的基础上,由作者加工整理、创作而成的。
            全书以宋江领导的农民起义为主要题材,艺术地再现了中国古代人民反抗压迫、英勇斗争的悲壮画卷。
            作品充分暴露了封建统治阶级的腐朽和残暴,揭露了当时尖锐对立的社会矛盾和“官逼民反”的残酷现实,成功地塑造了鲁智深、李逵、武松、林冲、阮小七等一批英雄人物。
            小说故事情节曲折,语言生动,人物性格鲜明,具有高度的艺术成就。但作品歌颂、美化宋江,鼓吹“忠义”和“替天行道”,表现出严重的思想局限。
        '''
    NewBook.PHOTO = ''
    NewBook.TYPE = '16'
    NewBook.PAPERTOTAL = '922'
    NewBook.WORDTOTAL = '912000'
    NewBook.SELLSTARTTIME = '2006-03-20'
    NewBook.SELLENDTIME = '2021-07-12'

    NewBook.save()
    print('插入成功')
  • 更新操作
def fun_update_book():
    try:
        obj = Book.objects.get(PRODUCTID=1)  #返回结果有且只有一个
        obj.NAME='水浒'
        obj.save()
        print('更新成功')
    except Book.DoesNotExist:
        print('PRODUCTID=1的记录不存在,未更新任何数据')
  • 删除操作
def fun_delete_book():
    obj = Book.objects.filter(NAME='水浒') #返回QuerySet
    del_rows=obj.count()
    obj.delete()
print('删除'+str(del_rows)+'条记录')
dm视图

编辑 dm/views.py 文件。

from django.http import HttpResponse

from .services import fun_get_books
from .services import fun_insert_book
from .services import fun_update_book
from .services import fun_delete_book

def index(request):
    # 查询
    fun_get_books()

    # 增加
    fun_insert_book()
    fun_get_books()

    # 更新
    fun_update_book()
    fun_get_books()

    # 删除
    fun_delete_book()
    fun_get_books()

    return HttpResponse("执行结束,请到控制台查看输出结果。")
启动服务器运行

最后启动 Django 自带的简易服务器

image-20230801170047186
posted on 2023-08-01 17:57  言行一  阅读(277)  评论(0编辑  收藏  举报