赞
踩
可以使用下面工具直接由mysql到达梦进行数据转移
如果提前创建好达梦数据库,在进行数据迁移时报错数据表已经存在可以直接单选重新执行数据迁移。
这时候上网搜索提示开启字段insert为on。实际上有可能数据超出表字段长度,也会报这个错误。看一下导进去的数据。
SET IDENTITY_INSERT "用户名"."表名" ON;
export PATH="/root/dmdba_arm/bin:$PATH"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/root/dmdba_arm/bin"
export DM_HOME="/root/dmdba_arm"
host
port
user
password
conn = dmPython.connect(配置)
cursor = conn.cursor()
查询返回的数据:[(), (), ()]
pip install DBUtils==1.3
from DBUtils.PooledDB import PooledDB
self.pool = PooledDB(creator=dmPython, mincached=50, maxcached=100, 配置)
conn = self.pool.connection()
cursor = conn.cursor()
查询返回的数据:[(), (), ()]
防sql注入,select_args()方法中sql语句占位符使用问号而不是%。
keys = [x[0].lower() for x in cursor.description]
result = [{x: y for x, y in zip(keys, v)} for i, v in enumerate(result)]
DATABASES = {
‘default’: {
‘ENGINE’: ‘django_dmPython’,
‘USER’: cfg.get(‘company_db’, ‘user’),
‘PASSWORD’: cfg.get(‘company_db’, ‘password’),
‘HOST’: cfg.get(‘company_db’, ‘host’),
‘PORT’: str(cfg.get(‘company_db’, ‘port’)),
}
}
dmPython.DatabaseError: [CODE:-2111]Error in line: 1
Invalid column name [AAAAAAAAAAAAAAAAAE]
问题出现在返回新增结果时候。是django_dmPython中语法错误。
/lib/python3.8/site-packages/django_dmPython/operations.py
query = 'select %s from %s where rowid = %s' %(self.quote_name(pk_name), self.quote_name(table_name), cursor.lastrowid)
改为
query = """select %s from %s where rowid = '%s'""" %(self.quote_name(pk_name), self.quote_name(table_name), cursor.lastrowid)
def dm_save_error_deal(orm_object):
try:
orm_object.save
except django.db.utils.DatabaseError as e:
if "Fail to cast string" in str(e):
pass
else:
raise e
except Exception as e:
raise e
# 达梦数据库低版本没有json,tinyint
create table 表明
(
id bigint primary key IDENTITY(1,1), # 自增
create_time timestamp default CURRENT_TIMESTAMP, # 时间类型没有datetime
description text null,
)
# 达梦数据库需要手动一条一条加conmment
comment on table 表名 is 'xxxx';
comment on column 表明.字段名 is 'xxx';
create index 索引名 on 表名 (字段名);
alter table 表名 add 字段名 字段类型; # 增加字段
alter table 表名 modify 字段名 字段类型; # 修改表字段类型
alter table 表名 rename column column1 to column2
alter table 表名 drop column column1
drop table 表名;
truncate table 表名;
select *, id_code from v$version; # 查看达梦版本
sp_tabledef(‘模式名’,‘表名’); #查看表定义
SELECT TABLE_OWNER, TABLE_NAME, COLUMN_NAME ,INDEX_NAME from DBA_IND_COLUMNS WHERE table_name ='表名';
create index 模式名.索引名 on 模式名.表名 (索引列);
# 联合唯一索引
create unique index 模式名.索引名 on 模式名.表名 (索引列, 索引列);
# 删除索引
drop index index1;
drop index 模式名.索引; # 索引名唯一
insert into table (column1, column2) values (value1, value2)
# 不支持下面语句
insert into table set column1=value1, column2=value2
# 没有date()方法,需要使用cast cast(column1 as DATE) # 在使用group by时不能group by 别名,或者使用子查询。例如: select cast(create_time as DATE) date_time, freq from test group by cast(create_time as DATE) # 不支持sum()、count()等函数内写条件式,需要结合case when...then...else...end select sum(case when column1 in ('', '') then 1 else 0 end) from table # 达梦数据库中整数/整数会保留整数,所以需要在分母使用cast转为float或者decimal,结果最好也控制一下小数点位数 select cast((sum(case when column1 in ('', '') then 1 else 0 end)/ cast(count(1) as decimal)) as decimal(10,5)) from table # 达梦数据库中除法当分母为0时会报错,所以也需要做一个判断 select case when count(1) != 0 then cast((sum(case when column1 in ('', '') then 1 else 0 end)/ cast(count(1) as decimal)) as decimal(10,5)) else 0 end from table # 标准差 stddev_smap()
如何将达梦数据库表的非主键唯一索引改成普通索引?如果不能改的话,怎么删呢?删的时候报错:没有删除表[XXX]上索引的权限
SELECT a.OWNER, a.TABLE_NAME, b.COLUMN_NAME, a.CONSTRAINT_NAME
from DBA_CONSTRAINTS a, ALL_CONS_COLUMNS b where a.CONSTRAINT_NAME=b.CONSTRAINT_NAME and CONSTRAINT_TYPE='U';
alter table 模式名.表名 drop constraint 约束名;
create sequence hello_word_id start with 1 increment by 1; # 创建自增序列
alter table DEPART_INFO modify (id default hello_word_id.nextval not null); # 关联序列
在执行sql语句时显示锁超时,执行不成功
select vs.SESS_ID,b.NAME,a.* from v$lock a LEFT JOIN SYS.SYSOBJECTS b on b.ID = a.TABLE_ID left join v$sessions vs on vs.TRX_id = a.Trx_id where b.NAME is NOT null
sp_close_session('sess_id');
每次创建用户会自带一个与用户名相同的数据库schema,会默认使用这个库。最好使用这个数据库,因为在这个用户下再创建其它库,web项目连接达梦此用户时使用默认库,如何选择其它库不知道怎么改。当在这个用户下再新建数据库后,新建表需要指定库名,否则全部创建在默认数据库下。所以新建数据库建议先使用管理员账户SYSDBA(初始密码同这个)创建用户。否则写代码连接数据库需要指定。
需要管理员账户授权用户创建shema和表。创建用户,指定连接20分钟端断开。
创建数据库表,没有datetime字段,使用timestamp,表comment和字段comment也没有,需要在创表之后单独运行。低版本也没有json数据类型,也没有longtext数据类型。没有自增id,需要使用上面方法来解决。
对用户进行数据库表操作授权
grant soi to 用户名;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。