You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flask-SQLAlchemy中设置自增主键的起始值

解决SQLAlchemy主键自增起始值设为100的问题

针对你定义的test模型,要把主键id的自增起始值从默认的0改成100,可根据你使用的数据库类型,通过以下两种方式实现:

方式一:表创建时自动设置(通过SQLAlchemy事件监听)

给模型添加表创建后的事件监听,自动执行对应数据库的原生SQL来设置自增起始值,代码如下:

from sqlalchemy import event
from your_app import db  # 替换成你的db实例

class test(db.Model):
    id = db.Column(db.Integer(), primary_key=True)
    message = db.Column(db.String())

# 监听表创建完成事件,设置自增起始值
@event.listens_for(test.__table__, 'after_create')
def set_autoincrement_start(target, connection, **kwargs):
    dialect = connection.engine.dialect.name
    if dialect in ['mysql', 'mariadb']:
        # MySQL/MariaDB 设置自增起始值
        connection.execute("ALTER TABLE test AUTO_INCREMENT = 100;")
    elif dialect == 'postgresql':
        # PostgreSQL 重置序列起始值(默认序列名:表名_列名_seq)
        connection.execute("ALTER SEQUENCE test_id_seq RESTART WITH 100;")
    elif dialect == 'sqlite':
        # SQLite 修改SQLITE_SEQUENCE表,seq设为99则下一个自增值为100
        connection.execute("UPDATE SQLITE_SEQUENCE SET seq = 99 WHERE name = 'test';")

方式二:手动执行原生SQL(适用于已存在的表)

如果表已经创建完成,直接在代码或终端中执行对应数据库的SQL语句即可:

  • MySQL/MariaDB:
ALTER TABLE test AUTO_INCREMENT = 100;

在Flask中执行:

db.session.execute("ALTER TABLE test AUTO_INCREMENT = 100;")
db.session.commit()
  • PostgreSQL:
ALTER SEQUENCE test_id_seq RESTART WITH 100;
  • SQLite:
UPDATE SQLITE_SEQUENCE SET seq = 99 WHERE name = 'test';

注意事项

  • 确保表名正确:默认情况下SQLAlchemy会把模型类名转成小写作为表名,如果你自定义了表名(比如__tablename__ = 'custom_test'),要同步修改SQL中的表名/序列名。
  • PostgreSQL的序列名默认是表名_列名_seq,如果修改过序列名称,需要替换成实际的序列名。

内容的提问来源于stack exchange,提问作者jake

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 22:15:29