Python第14课:oracle数据库的使用
时间 2019-01-23~2019-1-25
主讲 陈振华
地点 四楼电教室
数据库实质上是一个信息的列表,简单的信息列表可以用文本记录,错综复杂列表信息需要数据库的进行管理。数据库具有几个特点:一是行数多,二是允许多用户同时使用,三是安全。
一、oracle基本常用的数据类型
varchar(长度) 字符串
char(长度) 字符
number(x,y) x表示总位数 y表示保留小数点后几位数。例如:number(5,3)最大的数是99.999
decimal() 数字
long int integer 整数
date 日期
timestamp 日期
clob blob 特殊文本 二进制
在oracle中,number既可存整数,也可以存浮点数。而int只能存整数。
二、命令基本操作:
1.查看当前用户的权限:
select * from session_privs;
2.给用户增加授权(需要切换到system用户下操作):
grant create sequence to lpf8;
3.建表:
create table student(
id number primary key,
name varchar2(10) not null
);
注意:建表的时候,表名和字段名,不加引号的话,默认自动转大写!
4.查当前用户下的表:
select * from tab;
5.设置主键
alter table test add constraint id primary key(id);
在表内已有记录的情况下:
如果id有重复,设置失败。如果id无重复,设置成功。
查询一个表的主键:
select constraint_name from user_constraints where table_name='ABC' and constraint_type='P';
禁用主键:alter table jack disable primary key;
启用主键:alter table jack enable primary key;
禁用后,主键仍然存在,可以被查到。但是,如果在禁用后,向记录中添加了针对主键的重复内容,则在启用主键时,会报错,即无法启用。
6.实现id自增长
(1)创建序列
create sequence student_id_seq;
(2)用.nextval方法插入字段值
insert into student values (student_id_seq.nextval,'张三');
注意:只能用单引号!
7.删除表
drop table abc;
oracle删除表后,并未真正删除,而是生成BIN开头的临时表,放在回收站中。
清空回收站的命令:purge recyclebin;
彻底删除表,不进入回收站:
drop table student purge;
8.删除用户及级联关系:
drop user ABC cascade;
9.删除表空间及数据文件
drop tablespace 表空间名称 including contents and datafiles cascade constraint;
10.对表的操作
(1)增加字段
alter table abc add area varchar2(10);
(2)删除字段
alter table abc drop column name;
(3)修改字段名
alter table abc rename column name to name2;
修改字段类型:
alter table Student modify (id varchar2(64));
(4)修改表名
alter table abc rename to abc2;
(5)清空表(保留结构)
turncate table abc;
(6)统计
select count(id) from abc;
(7)添加和查询表注释
comment on table abc is '某个表的注释';
select * from user_tab_comments;
(8)添加和查询字段注释
comment on column 表名.字段名 is '注释内容';
select * from user_col_comments where table_name=upper('abc');
(9)查询前10条记录
select * from ABC where rownum<=10
11.关于commit提交
SQL语言分为五大类:
1,DDL(数据定义语言) - Create、Alter、Drop 这些语句自动提交,无需用Commit提交。
2,DQL(数据查询语言) - Select 查询语句不存在提交问题。
3,DML(数据操纵语言) - Insert、Update、Delete 这些语句需要Commit才能提交。
当执行dml命令如果没有提交,将不会被其他回话看到。除非在dml命令之后执行了ddl命令或者dcl命令,或者用户退出回话终止实例,数据库会自动提交。
发出commit,使未能提交的dml命令提交。
4,DTL(事务控制语言) - Commit、Rollback 事务提交与回滚语句。
5,DCL(数据控制语言) - Grant、Revoke 授予权限与回收权限语句
三、使用Navicat for Oracle工具
1:首先下载好Navicat Premium(已放在ftp10.141.4.12上)
选中其中的navicat.exe,双击启动。
注意:使用Navicat Premium连接,需要Navicat Premium的oci.dll文件的版本与oracle的版本一致,现在安装的是oracle 11.2的版本,而Navicat Premium是10.1的版本,需要网上下载instantclient11.2的版本,已经下载,放在ftp10.141.4.12上 ,更换oci.dll的方法为进入Navicat
Premium 点击工具——>选项——>OCI
然后将OCI library(oci.dll):中文件路径改为我上传的instantclient11.2中oci.dll的路径。
更换完毕后可以进行连接
连接名随便取,连接类型basic,主机localhost,端口1521,服务名、用户system,密码为安装数据库时设置的口令。
远程连接其他服务器的oracle同上,如连接情报小平台数据库等。
jdbc连接数据库的时候,需要使用数据库的sid_name,而不是数据库的services_name.
而使用plsql连接数据库的时候,只需要数据库的services_name即可,所以修改连接字符串中的services_name 为sid_name.
查询sid_name的方法:
select INSTANCE_NAME from v$instance;
返回:orcl
此时,连接提示上述错误。需要修改一个文件:
目录 E:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN
文件 listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = E:\app\Administrator\product\11.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:E:\app\Administrator\product\11.2.0\dbhome_1\bin\oraclr11.dll")
)(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(ORACLE_HOME = E:\app\Administrator\product\11.2.0\dbhome_1)
(SID_NAME = ORCL)
)
)
以上斜体加黑部门,为添加内容。复述如下,供复制:
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(ORACLE_HOME = E:\app\Administrator\product\11.2.0\dbhome_1)
(SID_NAME = ORCL)
)
添加后保存。重启电脑,连接成功!
如需远程访问,要将文件中的localhost修改为本机IP地址。
如需修改默认的1521端口,在该文件的对应位置修改即可。
四、python连接oracle数据库
1.安装包cx_oracle
注:该包可通过官方下载的whl格式包安装。
pycharm所在的客户机,必须安装和服务器相同版本的oracle,否则无法连接。
2.设置
修改listener.ora文件
原: (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 8889))
改为: (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.11.6)(PORT = 8889))
3.连接:
import cx_Oracle;
conn = cx_Oracle.connect('lpf8/******@218.95.95.26:****/orcl')
# 使用cursor()方法获取操作游标
cur = conn.cursor()
sql="select *from student"
cur.execute(sql)
data=cur.fetchall()
for i in data:
print(i)
cur.close()
conn.close()
单词学习:
constraints 约束、限制。oracle中指主键。