I'm not even going to ask how you got in this situation :) Could you?:

0) Create a patch to Field for an autoincrement field type
1) Create a new table (whopper_temp) on your database with an id field
that is NOT set to auto-increment (yet)
2) Copy all records from the table in question to whopper_temp,
casting whopper_id to an integer as you go.
3) Rename your source table
4) Rename whopper_temp to the source tables original name
5) Change Field type for whopper_id to your new autoincrement type


On Jun 7, 8:29 pm, Thadeus Burgess <thade...@thadeusb.com> wrote:
> I have a problem.
>
> I have this in the database....
>
> Field("whopper_id", "string", default=None, unique=True),
>
> The thing with whopper_id is it always stores numbers. Said numbers
> are anywhere from 20000 to 60000.
>
> Also upon entering a new entry, I do the following
>
> last_whopper_id = db(db.table.id > 0).select(db.table.whopper_id,
> orderby=~db.table.whopper_id, limit=(0,1)).first().whopper_id
> db.insert(whopper_id = (int(last_whopper_id) + 1))
>
> So I do all this juju just to get the number to autoincrement.
>
> The problem is, this structure is bad... first I'm storing integers in
> a string field, and then manually incrementing them!!!!
>
> I get errors like... IntegrityError: duplicate key value violates
> unique constraint "table_whopper_id_key"... when two requests come in
> to create a record within miliseconds of each other.
>
> Here is where I need some help please.
>
> I need to convert this entire field, into an autoincrementing integer
> performed by the database, however ALL current whopper_ids must stay
> EXACTLY the same.
>
> I don't know how to accomplish this with web2py. I know what I want...
>
> Field("whopper_id", "integer", unique=True, autoincrement=True)
>
> But how do I convert all existing whopper_ids over and keep them the exact 
> same?
>
> Is this even possible with web2py and the DAL?
>
> --
> Thadeus

Reply via email to