SQLAlchemy: How to make an integer column auto_increment (and unique) without making it a primary key?

23,311

You can add an AUTO_INCREMENT not primary key but you can't have two AUTO_INCREMENT fields

If you don't have AUTO_INCREMENT you can add an AUTO_INCREMENT and UNIQUE whith something like this:

ALTER TABLE `items` ADD `AutoInc` INT NOT NULL AUTO_INCREMENT, ADD UNIQUE (`AutoInc`)
Share:
23,311
ajay
Author by

ajay

Always learning.

Updated on November 26, 2020

Comments

  • ajay
    ajay over 3 years

    I am using Flask extension for SQLAlchemy to define my database model. I want an id column to be int type and with auto_increment property but without making it a primary key. How do I achieve it?

    I tried this:

    from flask import Flask, jsonify
    from flask.ext.sqlalchemy import SQLAlchemy
    
    app = Flask(__name__)
    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:ajay@localhost/pydb'
    app.config['SQLALCHEMY_ECHO'] = True
    db = SQLAlchemy(app)
    
    class Scenario(db.Model):
        scid = db.Column(db.Integer, nullable=False, unique=True, autoincrement=True)
        scenario_name = db.Column(db.String(100), primary_key=True)
        scenario_description = db.Column(db.String(200), nullable=False)
        image_id = db.Column(db.Integer, db.ForeignKey('images.id', onupdate='CASCADE', ondelete='CASCADE'))
    
        def __init__(self, scenario_name, scenario_description, image_id=None):
            self.scenario_name = scenario_name
            self.scenario_description = scenario_description
            self.image_id = image_id
    
        def __repr__(self):
            return '<Scenario %r, %r, %r>' % (self.scenario_name, self.scenario_description, self.image_id)
    

    but this doesn't set the scid column as auto_increment.