web-dev-qa-db-ja.com

SQLAlchemy:整数列を主キーにせずにauto_increment(および一意)にする方法は?

データベースモデルを定義するためにSQLAlchemyのFlask拡張機能を使用しています。id列をint型にし、auto_incrementプロパティを使用しますが、主キーにしません。どうすればよいですか?

私はこれを試しました:

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)

ただし、これはscid列をauto_incrementとして設定しません。

13
ajay

主キーではなくAUTO_INCREMENTを追加できますが、2つのAUTO_INCREMENTフィールドを持つことはできません

AUTO_INCREMENTがない場合は、次のようにAUTO_INCREMENTUNIQUEを追加できます。

ALTER TABLE `items` ADD `AutoInc` INT NOT NULL AUTO_INCREMENT, ADD UNIQUE (`AutoInc`)
1
genespos