python - SQL炼金术 : How to make an integer column auto_increment (and unique) without making it a primary key?

标签 python mysql flask auto-increment flask-sqlalchemy

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

最佳答案

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

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

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

关于python - SQL炼金术 : How to make an integer column auto_increment (and unique) without making it a primary key?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19243232/

相关文章:

python - 在字符串中的特定单词之后插入项目

python - python中的系列总和

php - 如何从多个表中获取多个计数?

python - Flask App 进行多次登录尝试的奇怪行为

python - 值错误 :could not convert string to float: b'*********'

php - 使用 Codeigniter 在 MySQL 中安全地转义动态表名

mysql - JOIN 语句的数量如何影响查询的持续时间/获取时间?我有一个简单的、反直觉的例子

python - 如何以编程方式将数据输入 python 'input()' 提示?

python - Flask:使用 unittest 进行测试 - 如何从响应中获取 .post json

python - 使用 Kivy 创建仿真器前端是否可行?