def get_table_description(self, cursor, table_name, identity_check=True):

        # map pyodbc's cursor.columns to db-api cursor description
        columns = [[c[3], c[4], None, c[6], c[6], c[8], c[10]] for c in cursor.columns(table=table_name)]
        items = []
        for column in columns:
            if identity_check and self._is_auto_field(cursor, table_name, column[0]):
                column[1] = SQL_AUTOFIELD
            # The conversion from TextField to CharField below is unwise.
            #   A SQLServer db field of type "Text" is not interchangeable with a CharField, no matter how short its max_length.
            #   For example, model.objects.values(<text_field_name>).count() will fail on a sqlserver 'text' field
            if column[1] == Database.SQL_WVARCHAR and column[3] < 4000:
                column[1] = Database.SQL_WCHAR
            items.append(column)
        return items
Check if credit card has expired.
dataset/ETHPy150Open lionheart/django-pyodbc/django_pyodbc/introspection.py/DatabaseIntrospection.get_table_description--crossover with--dataset/ETHPy150Open dokterbob/satchmo/satchmo/apps/payment/forms.py/CreditPayShipForm.clean_year_expires