目的: 通过python连接远程的一台oracle数据库服务器,并用python代码实现增删改查的操作。本研究是为测试API准备数据库环境的第一步。
环境配置(如果用64bit的,就都需要64bit):
1. 在本地计算机上安装好oralce client (64bit)
2. 在本地安装好python (64bit)
3. 在本地安装好python的插件cx_Oracle (64bit)
我需要连接的数据库的tns如下(位于oracle client下的tnsnames.ora文件):
ORCL140 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.130.140)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
假定使用的账号密码为为
ames/123
连接数据库,增删改查的示例如下(操作完毕后记得关闭连接和cursor):
import cx_Oracle
import time, datetime
# -----连接数据库------------------------------------------
# 连接方法 ames是登录数据库的用户名; 123是密码; 192.168.130.140:1521是oracle服务器所在的地址和端口号
# orcl 是配置在oracle client下tnsnames.ora的SERVICE_NAME
conn = cx_Oracle.connect("ames", "123", "192.168.130.140:1521/orcl")
cur = conn.cursor()
# -----查询数据库------------------------------------------
# sql = "SELECT * FROM Ams_User_Scope_Certificate order by ID"
# cur.execute(sql)
#
# # 读取每行的数据 方法一:用for...in方法
# rows = cur.fetchall()
# for row in rows:
# print(row)
# 读取每行的数据 方法二:用while方法
# while(True):
# row = cur.fetchone()
# if row == None:
# break
# print(row)
# 返回行数
# rows = cur.fetchall()
# print(cur.rowcount)
# -----插入数据------------------------------------------
# dt = datetime.date.today()
# dt_1_year_later = dt + datetime.timedelta(days = 365)
#
# param ={'ID':100000,
# 'FORUSER':100000,
# 'AUTHORITY':'APITest_authority',
# 'LICENCECATEGORY': 'APITest_Licencecategory',
# 'HKAAUTHEXPIRYDATE':dt_1_year_later
# }
#
# sql = "insert into Ams_User_Scope_Certificate values (:ID, :FORUSER, :AUTHORITY, :LICENCECATEGORY, :HKAAUTHEXPIRYDATE)"
# cur.execute(sql, param)
# conn.commit()
# -----删除表中指定行的数据------------------------------------------
# sql = "delete from Ams_User_Scope_Certificate where AUTHORITY like 'APITest%' "
# cur.execute(sql)
# conn.commit()
#------更新指定行的数据--------------------------------------------
# sql = "update Ams_User_Scope_Certificate set HKAAUTHEXPIRYDATE = to_date('2018/8/15', 'YYYY/MM/DD') where AUTHORITY = 'APITest_authority'"
# cur.execute(sql)
# conn.commit()
# -----关闭连接------------------------------------------------
# 操作完毕,关闭
cur.close()
conn.close()