SQLAlchemy:如何在不使其成为主键的情况下使整数列 auto_increment (且唯一)?

Posted

技术标签:

【中文标题】SQLAlchemy:如何在不使其成为主键的情况下使整数列 auto_increment (且唯一)?【英文标题】:SQLAlchemy: How to make an integer column auto_increment (and unique) without making it a primary key? 【发布时间】:2013-10-15 02:41:31 【问题描述】:

我正在使用 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。

【问题讨论】:

Set AUTO_INCREMENT using SqlAlchemy with MySQL on Columns with non-primary keys?的可能重复 我查看了那个问题,但没有得到任何帮助。 然后引起对这个问题的注意,也许是赏金。您的问题仍然是该帖子的副本;您正在尝试将非主键 int 列标记为自动递增。 @ajay:另一个问题的最佳答案说明了一切:SQLAlchemy 并没有真正轻松地处理这个问题。另外,setting the autoincrement field has no effect for columns that are not part of the primary key. ajay,这也太跟踪记录数了吧?如果删除记录怎么办?为什么不使用 count() 【参考方案1】:

您可以添加一个 AUTO_INCREMENT 而不是主键,但您不能有两个 AUTO_INCREMENT 字段

如果您没有AUTO_INCREMENT,您可以添加AUTO_INCREMENTUNIQUE,如下所示:

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

【讨论】:

以上是关于SQLAlchemy:如何在不使其成为主键的情况下使整数列 auto_increment (且唯一)?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使项目变灰的情况下禁用 UITabBarItem

如何将图像放在后面而不使其成为背景图像?

如何在不使当前视图颤动的情况下实现这种幻灯片效果

如何在不使它们不可变的情况下使 python 数据类可散列?

如何在不使其全屏的情况下删除颤振闪屏状态栏的颜色覆盖?

Visual C++/Cli 中的异步睡眠,如何在不使 GUI 停止的情况下创建一个 X 毫秒来调用函数