Changeset 972 for trunk


Ignore:
Timestamp:
Apr 19, 2019, 3:37:34 PM (5 months ago)
Author:
cito
Message:

Speed-up guessing simple types

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/pg.py

    r971 r972  
    583583        return {}
    584584
     585    _simple_types = {
     586        Bytea: 'bytea',
     587        str: 'text',
     588        bytes: 'text',
     589        bool: 'bool',
     590        int: 'int',
     591        long: 'int',
     592        float: 'float',
     593        Decimal: 'num',
     594        date: 'date',
     595        time: 'date',
     596        datetime: 'date',
     597        timedelta: 'date'
     598    }
     599
    585600    @classmethod
    586601    def guess_simple_type(cls, value):
    587602        """Try to guess which database type the given value has."""
     603        # optimize for most frequent types
     604        simple_type = cls._simple_types.get(type(value))
     605        if simple_type:
     606            return simple_type
    588607        if isinstance(value, Bytea):
    589608            return 'bytea'
     
    604623        if isinstance(value, tuple):
    605624            simple_type = cls.simple_type
    606             typ = simple_type('record')
    607625            guess = cls.guess_simple_type
     626
    608627            def get_attnames(self):
    609628                return AttrDict((str(n + 1), simple_type(guess(v)))
    610629                    for n, v in enumerate(value))
     630
     631            typ = simple_type('record')
    611632            typ._get_attnames = get_attnames
    612633            return typ
Note: See TracChangeset for help on using the changeset viewer.