用什么方式链接oracle数据库,使用cx_Oracle 连接oracle数据库的几种方式
連接oracle數(shù)據(jù)庫的幾種方式: 語法: cx_Oracle.connect('username','pwd','IP/HOSTNAME:PORT/TNSNAME') import cx_Oracle db1=cx_Oracle.
連接數(shù)據(jù)庫的幾種方式:
語法:cx_Oracle.connect('username','pwd','IP/HOSTNAME:PORT/TNSNAME')
import?cx_Oracle
db1=cx_Oracle.connect('yang','yang','127.0.0.1:1523/yangdb')
db2=cx_Oracle.connect('yang/yang@127.0.0.1:1523/yangdb')
對于dsn 方式:makedsn(IP/HOST,PORT,TNSNAME)
dsn=cx_Oracle.makedsn('127.0.0.1','1523','yangdb')
db3=cx_Oracle.connect('yang','yang',dsn)
例子:oracle@rac3:/home/oracle/python>vim?conndb4.py
import?cx_Oracle
username?=?"yang"
pwd?=?"yang"
--建立連接dsn=cx_Oracle.makedsn('127.0.0.1','1523','yangdb')
db1=cx_Oracle.connect(username,pwd,dsn)
--獲取游標cursor?=?db1.cursor()
--執(zhí)行查詢sql?=?"select?*?from?tab"
cursor.execute(sql)
--獲取數(shù)據(jù) ,可以有多種方式 fetchall(),fetchmang(N)(N 為正整數(shù)),fetchone()result?=?cursor.fetchall()
count?=?cursor.rowcount
print?"====================="
print?"Total:",?count
print?"====================="
for?row?in?result:
print?row
cursor.close
db1.close()
oracle@rac3:/home/oracle/python>python?conndb4.py
=====================
Total:?9
=====================
('BIG_TABLE',?'TABLE',?None)
('BIN$sgD3dAkmWHfgQPoK8Qcq3Q==$0',?'TABLE',?None)
('BIND',?'TABLE',?None)
('IM_SMS_ADD_FRIEND',?'TABLE',?None)
('PARALTAB',?'TABLE',?None)
('T1',?'TABLE',?None)
('T2',?'TABLE',?None)
('T3',?'TABLE',?None)
('T4',?'TABLE',?None)
1 ?分析: cx_Oracle.Cursor.parse([statement]) 在執(zhí)行語句之前對其進行驗證,當此類語句檢測出錯誤的時候,會引發(fā)DatabaseError異常
2 執(zhí)行a?cx_Oracle.Cursor.execute(statement,[parameters],**keyword_parameters)
此方法可以接受單個參數(shù)--一條sql語句直接針對數(shù)據(jù)庫來運行。通過parameters或keyword_parameters 參數(shù)賦值的綁定變量可以指定為字典,學列或者一組關鍵字參數(shù)。如果已經提供了字典或關鍵字參數(shù),那么這些值將與名稱綁定。如果給出的是序列,將根據(jù)這些值的位置對他們進行解析。如果是查詢操作,此方法返回一個變量對象列表;如果不是則返回None
b cx_Oracle.Cursor.executemany(statement,parameter) 對于批量插入尤其有用,因為操作的數(shù)量限制為僅僅一個。
3 獲取 僅僅適用于查詢--DDL,DCL 語句不返回結果。在不執(zhí)行查詢的游標上,這些方法將引發(fā)InterfaceError異常
3.1 cx_Oracle.Cursor.fetchall() 以字節(jié)組列表形式獲取結果集中的所有剩余行,如果沒有剩余行。它返回一個空白列表。獲取操作可以通過設置游標的arraysize 屬性進行調整,該屬性可以設置在每個底層請求中從數(shù)據(jù)庫中返回的行數(shù)。arraysize 的設置越高,需要在網絡中往返傳輸?shù)拇螖?shù)越少,arraysize 的默認值為1.
3.2 cx_Oracle.Cursor.fetchmany(N) 從數(shù)據(jù)庫中獲取N行。默認為arraysize的值。如果N的值大于獲取到的行的數(shù)目,該方法獲取的行數(shù)是真實的行數(shù)。oracle@rac3:/home/oracle/python>cat?conndb2.py
import?cx_Oracle
username?=?"yang"
pwd?=?"yang"
db1=cx_Oracle.connect(username,pwd,'127.0.0.1:1523/yangdb')
cursor?=?db1.cursor()
sql?=?"select?*?from?tab"
cursor.execute(sql)
result?=?cursor.fetchmany(5)
oracle@rac3:/home/oracle/python>python?conndb2.py
=====================
Total:?5
=====================
('BIG_TABLE',?'TABLE',?None)
('BIN$sgD3dAkmWHfgQPoK8Qcq3Q==$0',?'TABLE',?None)
('BIND',?'TABLE',?None)
('IM_SMS_ADD_FRIEND',?'TABLE',?None)
('PARALTAB',?'TABLE',?None)
3.3cx_Oracle.Cursor.fetchone()?獲取一個行數(shù)據(jù),單個字節(jié)組。如果無剩余行則返回none。
oracle@rac3:/home/oracle/python>cat?conndb2.py
import?cx_Oracle
username?=?"yang"
pwd?=?"yang"
db1=cx_Oracle.connect(username,pwd,'127.0.0.1:1523/yangdb')
cursor?=?db1.cursor()
sql?=?"select?*?from?tab"
cursor.execute(sql)
result?=?cursor.fetchmany(1)
count?=?cursor.rowcount
print?"====================="
print?"Total:",?count
print?"====================="
for?row?in?result:
print?row
cursor.close
db1.close()
oracle@rac3:/home/oracle/python>python?conndb2.py
=====================
Total:?1
=====================
('BIG_TABLE',?'TABLE',?None)
4 綁定變量模式 cx_Oracle 支持oracle綁定變量的特性bind_val={'dept_id':20,'sal':700}
query1=cursor.execute('select?*?from?emp?where?deptno=:dept_id?and?salary>:sal',bind_val)
query2=cursor.execute('select?*?from?emp?where?deptno=:dept_id?and?salary>:sal',bind_val,dept_id=20,sal=700)
可以使用print?coursor.bindnames()來查看綁定變量的值。
oracle@rac3:/home/oracle/python>python?conndb4.py
=====================
Total:?5
=====================
(7369,?'SMITH',?'CLERK',?7902,?datetime.datetime(1980,?12,?17,?0,?0),?800.0,?None,?20)
(7566,?'JONES',?'MANAGER',?7839,?datetime.datetime(1981,?4,?2,?0,?0),?2975.0,?None,?20)
(7788,?'SCOTT',?'ANALYST',?7566,?datetime.datetime(1987,?4,?19,?0,?0),?3000.0,?None,?20)
(7876,?'ADAMS',?'CLERK',?7788,?datetime.datetime(1987,?5,?23,?0,?0),?1100.0,?None,?20)
(7902,?'FORD',?'ANALYST',?7566,?datetime.datetime(1981,?12,?3,?0,?0),?3000.0,?None,?20)
bind_val={'dept_id':20,'sal':700}
cursor.execute('select?*?from?emp?where?deptno=:dept_id?and?sal>:sal',bind_val)
該過程使用的變量為:
['DEPT_ID',?'SAL']
該文由職坐標整理并發(fā)布,了解更多相關內容,請關注職坐標Oracle數(shù)據(jù)庫頻道!
總結
以上是生活随笔為你收集整理的用什么方式链接oracle数据库,使用cx_Oracle 连接oracle数据库的几种方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cla作用matlab,共轭亚油酸(CL
- 下一篇: 黑征信有办法恢复白户吗