Example #1
0
    def create_table(self, table_info):
        cur = self.conn.cursor()
        table_name = table_info["table_name"]
        columns = []
        for column_name, explain in table_info.items():
            if column_name == "table_name":
                continue
            column = ' '.join([column_name, explain])
            columns += [column]
        sql = 'create table {} ({})'.format(table_name, ', '.join(columns))
        logger.debug(sql)
        cur.execute(sql)
        logger.info('created {} table.'.format(table_name))

        # print(list(table_info.keys()))
        od = OrderedDict()
        od['id'] = None
        od['typename'] = table_name
        L = list(table_info.keys())
        logger.debug('list(table_info.keys()) = {}'.format(L))
        L.remove("table_name")
        od['field_names'] = ' '.join(L)
        self.insert('__namedtuples__', od)
        logger.info('2: inserted {} table info '
                    'to __namedtuples__ table.'.format(table_name))
Example #2
0
 def __init__(self, conn):
     self.conn = conn
     try:
         self.create_namedtuples_table()
     except sqlite3.OperationalError:
         pass
     logger.info('GeneralSQL(self=0x{:x}, conn=0x{:x}) done.'. \
                       format(id(self), id(conn)))
Example #3
0
 def _get_namedtuple(self, typename):
     if not hasattr(self.__dict__, typename):
         cur = self.cur
         sql = ('select * from __namedtuples__ where '
                'typename = "{}"').format(typename)
         logger.debug(sql)
         result = cur.execute(sql)
         logger.info('got {} __namedtuples__ info.'.format(typename))
         row = cur.fetchone()
         if not row:
             raise ValueError("typename={} is not in __namedtuples__")
         field_names = row[2]
         namedtup = namedtuple(typename, field_names)
         self.__dict__[typename] = namedtup
     else:
         namedtup = self.__dict__[typename]
     return namedtup
Example #4
0
    def __init__(self, conn, sql, values=None, max_rows=0):
        self.sql = sql
        self.values = values
        self.cur = conn.cursor()
        self.max_rows = max_rows
        self._i = 0
        sp = sql.split()
        table_name_index = sp.index('from') + 1
        table_name = sp[table_name_index]

        namedtup = self._get_namedtuple(table_name)

        if self.values:
            result = self.cur.execute('select ' + sql, self.values)
        else:
            result = self.cur.execute('select ' + sql)
        self.namedtup = namedtup
        logger.info('NamedRow(self={})'.format(self))
Example #5
0
    def create_namedtuples_table(self):
        conn = self.conn
        table_name = '__namedtuples__'
        sql = '''
            create table __namedtuples__
            (
                id integer primary key,
                typename uniq text,
                field_names text
            )'''
        logger.debug(sql)
        conn.execute(sql)
        conn.commit()
        logger.info('created __namedtuples__ table.')

        od = OrderedDict()
        od['id'] = None
        od['typename'] = table_name
        od['field_names'] = ''
        od['field_names'] = ' '.join(od.keys())
        logger.debug('od.keys() = {}'.format(od.keys))
        self.insert('__namedtuples__', od)
        logger.info('1: inserted __namedtuples__ table info '
                    'to __namedtuples__ table.')
Example #6
0
 def close(self):
     self.commit()
     self.conn.close()
     logger.info('close {}.'.format(self))