def execute(self, q, vars=[], log_query=1): query_count[0] += 1 q = self.database.db_connector.translate(q) vars = map(self.database.db_connector.translate_data, vars) start = time.time() try: if vars: self.cursor.execute(q, vars) else: self.cursor.execute(q) if self.auto_commit: self.conn.commit() end = time.time() if getattr(self.cursor, 'query', None): if orm.verbose_level() > 0: print cyan, '%.5f' % (end-start), normal, '\t', self.cursor.query else: if orm.verbose_level() > 0: print cyan, '%.5f' % (end-start), normal, '\t', q except Exception, e: self.conn.rollback() print >>sys.stderr, 'ERROR: ', q, vars traceback.print_exc() raise e
def save_row(self, row, cursor, silent, reflect): q = "INSERT INTO \"%s\"(%s) values(" newvals = row.values.keys() for i in row.values.keys(): if row.values[i].__class__ == SQLNone: newvals.remove(i) vals = [] changed_columns = [] for i in newvals: v = row.table.column_types[i].pre_save(row.values[i]) changed_columns.append(i) vals.append(v) ad = ', '.join( [row.database.db_connector.escape_character() for i in range(0, len(vals))]) + ');' quoted_cols = [] for i in changed_columns: if not i.startswith('"'): quoted_cols.append('"%s"' % i) else: quoted_cols.append(i) cursor.execute(q % (row.table.table_name, ','.join(quoted_cols)) + ad, vars=vals, log_query=silent) if reflect: if row.table.primary_key in changed_columns: if orm.verbose_level() > 1: print "\tPrimary Key was set in commit, so skipping." else: if row.table.primary_key: cursor.execute("select CURRVAL('%s_%s_seq');" % (row.table.table_name, row.table.primary_key), log_query=silent) row.values[row.table.primary_key] = cursor.fetchone()['currval'] row.original_values[row.table.primary_key] = row.values[row.table.primary_key]
def rollback(self): try: start = time.time() self.conn.rollback() end = time.time() if orm.verbose_level() > 0: print 'Rollback: %.10f' % (end-start) except: import traceback traceback.print_exc() self.conn.commit()
return None def pre_save(self, data): if data == None: return None else: data += '-' while len(data) % 16 != 0: data += ' ' return self.aes_object.encrypt(data) except: import orm if orm.verbose_level() > 0: print 'cant use AES encryption for SQLEncrypted column type.' class SQLEncrypt(SQLType): py_type = str def __init__(self, password='******'): SQLType.__init__(self) class SQLExternalFile(SQLType): py_type = str def __init__(self, file_prefix='/tmp/'): SQLType.__init__(self) self.file_prefix = file_prefix self.file_prefix = self.file_prefix.replace("~", '').replace('..', '') def post_load(self, data):