the names of attributes on your Python class and the names of columns that are emitted in SQL are two separate things. When you have "jobid = Column(Integer, ...)" , that's a declarative-only format that omits the first argument to Column which is the "name"; the declarative mapping process sets the "name" to be the same as the attribute name.
when you instead have "jobid = Column("somename", Integer ,...)", then you're passing the name argument.
this API grew out of some various legacy patterns which is why it's a little weird looking, but basically Column takes *args and it looks to see if it is getting "str, TypeEngine" or just "TypeEngine". It also can be passed neither in cases where it derives its type from a ForeignKey() object.