达梦DB操作记录

1、快速复制达梦表结构及数据

方法1:使用 CREATE TABLE … AS SELECT(CTAS)语句(推荐)

-- 复制表结构+数据
CREATE TABLE new_table AS SELECT * FROM original_table;

-- 仅复制表结构(不带数据)
CREATE TABLE new_table AS SELECT * FROM original_table WHERE 1=2;

方法2:使用 CREATE TABLE … LIKE + INSERT SELECT

-- 复制表结构(包含约束但不含索引)
CREATE TABLE new_table LIKE original_table;

-- 复制数据
INSERT INTO new_table SELECT * FROM original_table;

2、清空某一张表

TRUNCATE TABLE employees; -- 清空 employees 表

3、达梦数据将时间格式2024/03/20中的/换成-

3.1. 若字段为字符串类型(如 VARCHAR)

UPDATE 表名
SET 时间字段名 = REPLACE(时间字段名, '/', '-');

3.2、若字段为日期类型(如 DATE)

UPDATE 表名
SET 时间字段名 = TO_DATE(REPLACE(TO_CHAR(时间字段名, 'yyyy/mm/dd'), '/', '-'), 'yyyy-mm-dd');

4、现在有一个水果表,达梦按照月份和类型统计每个月销售总数

SELECT
    TO_CHAR(sale_date, 'YYYY-MM') AS month,  -- 提取年月并格式化为YYYY-MM
    fruit_type,                             -- 水果类型
    SUM(quantity) AS total_quantity         -- 计算销售总数
FROM fruit_sales                            -- 水果销售表
GROUP BY 
    TO_CHAR(sale_date, 'YYYY-MM'),          -- 按年月分组
    fruit_type                              -- 按水果类型分组
ORDER BY 
    month,                                  -- 按月份排序
    fruit_type;                             -- 按水果类型排序

5、达梦查询时间介于2025-01-01到2025-06-30之间的数据

SELECT *
FROM 表名
WHERE 日期字段 >= TO_DATE('2025-01-01', 'YYYY-MM-DD')
  AND 日期字段 < TO_DATE('2025-07-01', 'YYYY-MM-DD');

6、将字符串02或06,使用达梦去除0
6.1. 使用LTRIM函数

SELECT LTRIM('02', '0') FROM DUAL;  -- 结果: '2'
SELECT LTRIM('06', '0') FROM DUAL;  -- 结果: '6'

6.2. 使用REGEXP_REPLACE函数

SELECT REGEXP_REPLACE('02', '^0+', '') FROM DUAL;  -- 结果: '2'
SELECT REGEXP_REPLACE('06', '^0+', '') FROM DUAL;  -- 结果: '6'

6.3. 使用CASE WHEN判断

SELECT 
    CASE 
        WHEN LEFT('02', 1) = '0' THEN SUBSTRING('02', 2) 
        ELSE '02' 
    END 
FROM DUAL;  -- 结果: '2'

6.4. 使用CAST函数(如果字符串是数字)

SELECT CAST('02' AS INTEGER) FROM DUAL;  -- 结果: 2
SELECT CAST('06' AS INTEGER) FROM DUAL;  -- 结果: 6

7、MERGE INTO语法快速处理对应数据

<update id="batchMergeWithCondition" parameterType="java.util.List">
    <foreach collection="list" item="item" index="index" separator=";">
        MERGE INTO target_table t
        USING (SELECT 
              #{item.id} AS id,
              #{item.name} AS name,
              #{item.value} AS value,
              #{item.status} AS status
              FROM dual) s
        ON (t.id = s.id)
        WHEN MATCHED AND s.status = 1 THEN
            UPDATE SET 
            t.name = s.name,
            t.value = s.value
        WHEN NOT MATCHED AND s.status = 1 THEN
            INSERT (id, name, value)
            VALUES (s.id, s.name, s.value)
    </foreach>
</update>

8、达梦添加常用数据索引的几种方式

// 普通
8.1、CREATE INDEX index_name ON table_name(column_name);
// 唯一
8.2、CREATE UNIQUE INDEX index_name ON table_name(column_name);
// 复合
8.3、CREATE INDEX index_name ON table_name(column1, column2, ...);
### 使用 SQLAlchemy 操作达梦数据库 #### 1. 安装必要的驱动程序和支持库 为了使 SQLAlchemy 能够连接并操作达梦数据库,需要先安装支持的 Python 驱动程序。通常情况下,可以使用 `dm-python` 或其他兼容的第三方驱动来实现这一点。 可以通过以下命令安装所需的包: ```bash pip install dm-python sqlalchemy ``` 此过程确保了基础环境的支持[^1]。 --- #### 2. 创建 SQLALCHEMY 数据库引擎 SQLAlchemy 提供了一个强大的抽象层用于管理数据库交互。对于达梦数据库而言,其 URL 构建方式类似于 MySQL 和 PostgreSQL 的形式: ```python from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String # 达梦数据库连接字符串模板 DAMENG_URL_TEMPLATE = "dm://{username}:{password}@{host}:{port}/{database}" engine = create_engine( DAMENG_URL_TEMPLATE.format( username="your_username", password="your_password", host="localhost", # 替换为实际主机地址 port=5236, # 默认端口可能因版本不同而变化 database="test_db" ), echo=True # 开启调试模式以便查看日志 ) metadata = MetaData(bind=engine) ``` 上述代码片段定义了如何创建一个针对达梦数据库SQLAlchemy 引擎实例,并绑定了元数据对象以进一步描述表结构[^2]。 --- #### 3. 表模型定义与 CRUD 操作 利用 SQLAlchemy ORM 功能,可轻松完成对达梦数据库中的增删改查操作。下面是一个简单的例子展示如何定义一张用户表及其基本的操作方法: ```python class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String(50)) age = Column(Integer) # 插入新记录 with engine.connect() as conn: new_user = User(name='Alice', age=30) session.add(new_user) session.commit() # 查询所有用户 query_result = session.query(User).all() for user in query_result: print(f"{user.name} is {user.age} years old.") ``` 这里需要注意的是,由于某些特定功能可能存在差异(比如序列生成器),因此建议查阅官方文档确认具体行为是否一致。 --- #### 4. 处理事务与异常捕获 在生产环境中,合理的错误处理机制至关重要。当执行批量更新或者杂查询时尤其如此。推荐采用如下方式进行封装: ```python try: with engine.begin() as connection: result = connection.execute(text("UPDATE users SET age=:new_age WHERE name=:name"), {"new_age": 35, "name": "Alice"}) except Exception as e: logger.error(f"An error occurred while updating data: {e}") finally: if not connection.closed: connection.close() ``` 这种做法不仅提高了代码健壮性,还便于后续排查问题所在位置[^2]。 --- #### 5. 性能优化技巧 考虑到大规模读写场景下的效率需求,可以从以下几个方面入手改进性能表现: - **索引设计**: 合理设置唯一键、合索引来加速检索速度; - **分页加载**: 对于大数据集避免一次性取出全部内容; - **缓存策略**: 借助 Redis 等外部存储减少重计算开销; 以上措施均有助于提升整体系统的响应能力。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值