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 theautoincrement
field has no effect for columns that are not part of the primary key.
ajay,这也太跟踪记录数了吧?如果删除记录怎么办?为什么不使用 count()
【参考方案1】:
您可以添加一个 AUTO_INCREMENT
而不是主键,但您不能有两个 AUTO_INCREMENT
字段
如果您没有AUTO_INCREMENT
,您可以添加AUTO_INCREMENT
和UNIQUE
,如下所示:
ALTER TABLE `items` ADD `AutoInc` INT NOT NULL AUTO_INCREMENT, ADD UNIQUE (`AutoInc`)
【讨论】:
以上是关于SQLAlchemy:如何在不使其成为主键的情况下使整数列 auto_increment (且唯一)?的主要内容,如果未能解决你的问题,请参考以下文章