How to Add and Render Many Columns
I was unable do this using the technique above, because I could not figure out how to prevent re-setting of the location.  Therefore, I used the following technique:  create a single object, copy it with ob.copy, put copies into scene object list, and then update the scene.

bpy.ops.mesh.primitive_cylinder_add(vertices=numVertices, radius=columnSize,
    depth=height,location=loc)
ob = bpy.context.object
obs = []
sce = bpy.context.scene

f = open('input.data', 'r')
for line in f:
    values = line.split()

    x = float(values[1]) / scaleXY
    y = float(values[2]) / scaleXY
    height = float(values[3]) / scaleHeight

    copy = ob.copy()
    copy.location += Vector((x,y, 0))
    # copy.data = copy.data.copy() 
    copy.scale.x = copy.scale.x * height / 2 
    copy.scale.y = copy.scale.y * height / 2 
    copy.scale.z = copy.scale.z * height
    obs.append(copy)

for ob in obs:
    sce.objects.link(ob)

sce.update()