Einfache Methoden und gekapselte Klassenbeispiele für den Betrieb einer Oracle-Datenbank in Python

不言
Freigeben: 2018-05-07 14:25:27
Original
3626 Leute haben es durchsucht

In diesem Artikel werden hauptsächlich die einfachen Methoden und Kapselungsklassen von Python für den Betrieb der Oracle-Datenbank vorgestellt. Er analysiert anhand von Beispielen die grundlegenden Vorgänge zum einfachen Verbinden, Abfragen und Herunterfahren der Oracle-Datenbank und bietet eine Python-Kapselung für verschiedene Oracle-Operationen. Freunde, die sie benötigen, können sich auf

beziehen. Dieser Artikel beschreibt einfache Methoden und Kapselungsklassen für Python zum Betrieb der Oracle-Datenbank. Ich möchte es Ihnen als Referenz mitteilen:

Ich bin kürzlich bei der Arbeit mit Oracle in Kontakt gekommen und habe festgestellt, dass es an vielen Stellen viel bequemer wäre, Python-Skripte zu verwenden. Daher wollte ich zunächst die grundlegende Methode zur Bedienung von Oracle in Python erlernen.

Angesichts der Verwendung von Oracle und der Existenz von NetConfig von OracleClient denke ich, dass die Verbindung keine einfache Angelegenheit sein sollte.

Natürlich habe ich im Internet nach verschiedenen Verbindungsmethoden gesucht und sie dann lange gezeichnet, aber ich konnte keinen Überblick gewinnen.

Methode 1: Benutzername, Passwort und Überwachung jeweils als Parameter

conn=cx_Oracle.connect('用户名','密码','数据库地址:数据库端口/SID')
Nach dem Login kopieren

Laut mehreren Artikeln habe ich As a gelesen Als Erinnerung daran, dass ich beim Schreiben des Codes einen Fehler gemacht habe, habe ich festgestellt, dass das Konfigurationselement für Python zum Herstellen einer Verbindung zur Datenbank mit der Konfigurationsdatei tnsnames.ora des Oracle-Clients verknüpft sein sollte. Aber meine Konfigurationselemente hatten kein SID-Element und ich wusste zunächst nicht, was SID war. Ich folgte einfach den Angaben im Internet, sodass diese Methode fehlschlug. Später habe ich herausgefunden, dass ich dem Konfigurationselement eine SID hinzufügen muss, und habe dann darüber nachgedacht, ob mein System nach der Konfiguration dieses Dings neu gestartet werden muss. Schauen wir uns also zunächst andere Methoden an….

Methode 2: Benutzername, Passwort und Listener werden als ein Parameter verwendet

conn=cx_Oracle.connect('用户名/密码@数据库地址:数据库端口/SID')
Nach dem Login kopieren

Diese Methode ist im Grunde die gleiche wie Methode 1, die Suppe zu wechseln, ohne die Medizin zu wechseln...

Methode 3: TNS-Konfigurationsinformationen verwenden

conn=cx_Oracle.connect('用户名','密码',tns)
Nach dem Login kopieren

Der Code im Internet wird verwendet, um TNS mithilfe von Funktionen zu erhalten, und SID wird weiterhin verwendet, aber ... die Konfigurationselemente, die ich bereits verwenden kann, haben keine SID, also Ich verwende

tns=cx_Oracle.makedsn('数据库地址','数据库端口', 'SID')
Nach dem Login kopieren

funktioniert immer noch nicht, aber sehen Sie sich die Generierungsmethode dieses TNS an, die den beiden oben genannten Methoden ähnelt. Aber ich habe festgestellt, dass die Daten, die nach der zufälligen Eingabe einer SID generiert werden, so sind.

(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521)))(CONNECT_DATA=(SID=XE)))

Allerdings sind die Konfigurationselemente meines Clients wahrscheinlich so:

(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)( PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=KGDB)))

Los geht's, sie scheinen gleich zu sein und die Typen sind alle String-Typen. Versuchen Sie, sie direkt in meine einzufügen Datei Versuchen Sie, die Konfigurationselemente tns zuzuweisen.

tns = '(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=KGDB)))'
conn = cx_Oracle.connect('nicker', '123456', tns)
Nach dem Login kopieren

Hmm. Erfolgreich ~

Veröffentlichen Sie abschließend einen vollständigen Code der grundlegenden Verwendungsmethode

#coding:utf-8
import cx_Oracle
# 创建数据库连接
# cx_Oracle.connect('username','pwd','ora的tns信息')
# oracle数据库的tns信息,从tnsnames.ora中找到plsql可用的配置项,将该配置项直接拷贝过来即可
ora_tns = '(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=KGDB)))'
conn = cx_Oracle.connect('nicker', '123456', ora_tns)
# 操作游标
cursor = conn.cursor()
# 执行查询
cursor.execute("SELECT * FROM inst_info")
# 获取返回信息
rs = cursor.fetchall()
# 输出信息
for v in rs:
  print v
#关闭连接,释放资源
cursor.close()
conn.close()
Nach dem Login kopieren

Beobachtung und Zusammenfassung sind sehr wichtig Zum Verständnis müssen Sie außerdem

eine Klasse einfügen, die Oracle kapselt

#coding:utf-8
import cx_Oracle
# 封装的类
class cxOracle:
  '''
  tns的取值tnsnames.ora对应的配置项的值,如:
  tns = '(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.16.18.23)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=MYDB)))'
  '''
  def __init__(self ,uname, upwd,tns ):
    self ._uname = uname
    self ._upwd = upwd
    self ._tns = tns
    self ._conn = None
    self ._ReConnect()
  def _ReConnect(self ):
    if not self._conn :
      self ._conn = cx_Oracle.connect (self. _uname, self ._upwd, self._tns)
    else:
      pass
  def __del__(self ):
    if self. _conn:
      self ._conn. close()
      self ._conn = None
  def _NewCursor(self ):
    cur = self. _conn.cursor ()
    if cur:
      return cur
    else:
      print "#Error# Get New Cursor Failed."
      return None
  def _DelCursor(self , cur):
    if cur:
      cur .close()
  # 检查是否允许执行的sql语句
  def _PermitedUpdateSql(self ,sql):
    rt = True
    lrsql = sql. lower()
    sql_elems = [ lrsql.strip ().split()]
    # update和delete最少有四个单词项
    if len( sql_elems) < 4 :
      rt = False
    # 更新删除语句,判断首单词,不带where语句的sql不予执行
    elif sql_elems[0] in [ &#39;update&#39;, &#39;delete&#39;]:
      if &#39;where&#39; not in sql_elems :
        rt = False
    return rt
  # 导出结果为文件
  def Export(self , sql, file_name, colfg =&#39;||&#39;):
    rt = self. Query(sql )
    if rt:
      with open( file_name, &#39;a&#39;) as fd:
        for row in rt:
          ln_info = &#39;&#39;
          for col in row:
             ln_info += str( col) + colfg
          ln_info += &#39;\n&#39;
          fd .write( ln_info)
  # 查询
  def Query(self , sql, nStart=0 , nNum=- 1):
    rt = []
    # 获取cursor
    cur = self. _NewCursor()
    if not cur:
      return rt
    # 查询到列表
    cur .execute(sql)
    if ( nStart==0 ) and (nNum==1 ):
      rt .append( cur.fetchone ())
    else:
      rs = cur. fetchall()
      if nNum==- 1:
        rt .extend( rs[nStart:])
      else:
        rt .extend( rs[nStart:nStart +nNum])
    # 释放cursor
    self ._DelCursor(cur)
    return rt
  # 更新
  def Exec(self ,sql):
    # 获取cursor
    rt = None
    cur = self. _NewCursor()
    if not cur:
      return rt
    # 判断sql是否允许其执行
    if not _PermitedUpdateSql(sql ):
      return rt
    # 执行语句
    rt = cur. execute(sql )
    # 释放cursor
    self ._DelCursor(cur)
    return rt
# 类使用示例
tns = &#39;(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.16.17.46)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=MYDB)))&#39;
ora = cxOracle (&#39;nicker&#39;, &#39;123456&#39;, tns)
# 导出结果为文件
rs = ora .Export("SELECT * FROM org", &#39;1.txt&#39;)
# 查询结果到列表
rs = ora.Query("SELECT * FROM org")
print rs
# 更新数据
ora.Exec("update org set org_name=&#39;NewNameForUpdate&#39; where org_id=123456;")
Nach dem Login kopieren

Verwandte Empfehlungen:

Detaillierte Erklärung von Python mit dem cx_Oracle-Modul zum Betrieb der Oracle-Datenbank

Das obige ist der detaillierte Inhalt vonEinfache Methoden und gekapselte Klassenbeispiele für den Betrieb einer Oracle-Datenbank in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage