• R/O
  • SSH

execsql: Commit

Default repository for execsql.py


Commit MetaInfo

Révisioncd986a19a3513c11d38af7fb696000a90afbb8d2 (tree)
l'heure2019-10-12 03:32:57
AuteurDreas Nielsen <dnielsen@inte...>
CommiterDreas Nielsen

Message de Log

Initial code additions for Oracle support.

Change Summary

Modification

diff -r ced129ec59dc -r cd986a19a351 execsql/execsql.py
--- a/execsql/execsql.py Fri Oct 11 07:54:08 2019 -0700
+++ b/execsql/execsql.py Fri Oct 11 11:32:57 2019 -0700
@@ -27,12 +27,12 @@
2727 #
2828 # ===============================================================================
2929
30-__version__ = "1.52.1"
30+__version__ = "1.52.2"
3131 __vdate = "2019-10-11"
3232
3333 primary_vno = 1
3434 secondary_vno = 52
35-tertiary_vno = 1
35+tertiary_vno = 2
3636
3737 import os
3838 import os.path
@@ -2445,6 +2445,21 @@
24452445 dbt_firebird.name_datatype(DT_Text, "BLOB")
24462446 dbt_firebird.name_datatype(DT_Binary, "BLOB")
24472447
2448+dbt_oracle = DbType("Oracle")
2449+dbt_oracle.name_datatype(DT_TimestampTZ, "TIMESTAMP WITH TIME ZONE")
2450+dbt_oracle.name_datatype(DT_Timestamp, "TIMESTAMP")
2451+dbt_oracle.name_datatype(DT_Date, "DATE")
2452+dbt_oracle.name_datatype(DT_Time, "VARCHAR2")
2453+dbt_oracle.name_datatype(DT_Integer, "NUMBER")
2454+dbt_oracle.name_datatype(DT_Long, "NUMBER")
2455+dbt_oracle.name_datatype(DT_Float, "FLOAT")
2456+dbt_oracle.name_datatype(DT_Decimal, "NUMBER")
2457+dbt_oracle.name_datatype(DT_Boolean, "CHAR", True)
2458+dbt_oracle.name_datatype(DT_Character, "CHAR", True)
2459+dbt_postgres.name_datatype(DT_Varchar, "NVARCHAR2", True)
2460+dbt_postgres.name_datatype(DT_Text, "CLOB")
2461+dbt_postgres.name_datatype(DT_Binary, "BLOB")
2462+
24482463 # End of database types.
24492464 #===============================================================================================
24502465
@@ -3668,6 +3683,47 @@
36683683 self.cursor().execute(sql, (psycopg2.Binary(filedata),))
36693684
36703685
3686+class OracleDatabase(Database):
3687+ def __init__(self, server_name, db_name, user_name, need_passwd=False, port=5432, encoding='UTF8', password=None):
3688+ global cx_Oracle
3689+ try:
3690+ import cx_Oracle
3691+ except:
3692+ fatal_error(u"The cx-Oracle module is required to connect to Oracle. See https://pypi.org/project/cx-Oracle/")
3693+ self.type = dbt_oracle
3694+ self.server_name = server_name
3695+ self.db_name = db_name
3696+ self.user = user_name
3697+ self.need_passwd = need_passwd
3698+ self.password = password
3699+ self.port = port if port else 1521
3700+ self.encoding = encoding or 'UTF8'
3701+ self.encode_commands = False
3702+ self.paramstr = ':%s'
3703+ self.conn = None
3704+ self.autocommit = True
3705+ self.open_db()
3706+ def __repr__(self):
3707+ return u"OracleDatabase(%r, %r, %r, %r, %r, %r)" % (self.server_name, self.db_name, self.user,
3708+ self.need_passwd, self.port, self.encoding)
3709+ def open_db(self):
3710+ def db_conn(db, db_name):
3711+ if db.user and db.password:
3712+ return cx_Oracle.connect(host=str(db.server_name), database=str(db_name), port=db.port, user=db.user, password=db.password)
3713+ else:
3714+ return cx_Oracle.connect(host=str(db.server_name), database=db_name, port=db.port)
3715+ def exec_cmd(self, querycommand):
3716+ # The querycommand must be a stored function (/procedure)
3717+ curs = self.cursor()
3718+ cmd = u"select %s()" % querycommand
3719+ try:
3720+ curs.execute(cmd)
3721+ subvars.add_substitution("$LAST_ROWCOUNT", curs.rowcount)
3722+ except:
3723+ self.rollback()
3724+ raise
3725+
3726+
36713727 class SQLiteDatabase(Database):
36723728 def __init__(self, SQLite_fn):
36733729 global sqlite3
Afficher sur ancien navigateur de dépôt.