sql >> Databáze >  >> RDS >> Oracle

Analyzujte soubor SQL pomocí PL/SQL a DML/DDL pomocí cx_Oracle v pythonu

Je možné provádět více příkazů současně, ale je to semi-hacky. Musíte zabalit své příkazy a provést je jeden po druhém.

>>> import cx_Oracle
>>>
>>> a = cx_Oracle.connect('schema/[email protected]')
>>> curs = a.cursor()
>>> SQL = (("""create table tmp_test ( a date )"""),
... ("""insert into tmp_test values ( sysdate )""")
... )
>>> for i in SQL:
...     print i
...
create table tmp_test ( a date )
insert into tmp_test values ( sysdate )
>>> for i in SQL:
...     curs.execute(i)
...
>>> a.commit()
>>>

Jak jste si všimli, toto neřeší problém středníku, na který neexistuje snadná odpověď. Jak vidím, máte 3 možnosti:

  1. Napište příliš komplikovaný analyzátor, což podle mě není vůbec dobrá volba.

  2. Nespouštějte SQL skripty z Pythonu; mít kód buď v samostatných skriptech SQL, takže analýza je snadná, v samostatném souboru Python, vloženém do kódu Pythonu, v proceduře v databázi... atd. Toto je pravděpodobně moje preferovaná možnost.

  3. Použijte subprocess a nazvěte skript tímto způsobem. Toto je nejjednodušší a nejrychlejší možnost, ale nepoužívá cx_Oracle vůbec.

    >>> import subprocess
    >>> cmdline = ['sqlplus','schema/[email protected]','@','tmp_test.sql']
    >>> subprocess.call(cmdline)
    
    SQL*Plus: Release 9.2.0.1.0 - Production on Fri Apr 13 09:40:41 2012
    
    Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
    
    
    Connected to:
    Oracle Database 11g Release 11.2.0.1.0 - 64bit Production
    
    SQL>
    SQL> CREATE TABLE FOO(id number);
    
    Table created.
    
    SQL>
    SQL> BEGIN
      2    INSERT INTO FOO VALUES(1);
      3    INSERT INTO FOO VALUES(2);
      4    INSERT INTO FOO VALUES(3);
      5  END;
      6  /
    
    PL/SQL procedure successfully completed.
    
    SQL> CREATE TABLE BAR(id number);
    
    Table created.
    
    SQL>
    SQL> quit
    Disconnected from Oracle Database 11g Release 11.2.0.1.0 - 64bit Production
    0
    >>>
    



  1. Pole v dotazu SQL?

  2. Implementace NULLS FIRST v Amazon Redshift

  3. Oracle SQL Query pro shrnutí statistik pomocí GROUP BY

  4. Výchozí nápověda k uzamčení tabulky na SQL Server 2005/2008