首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置SQLAlchemy自动增量起始值

设置SQLAlchemy自动增量起始值
EN

Stack Overflow用户
提问于 2012-05-08 14:57:06
回答 4查看 32.9K关注 0票数 30

autoincrementSQLAlchemy中的参数似乎只是TrueFalse,但我想设置预定义的值aid = 1001,via自动增量aid = 1002当下一次插入完成时。

在SQL中,可以更改为:

代码语言:js
复制
ALTER TABLE article AUTO_INCREMENT = 1001;

我正在使用MySQL我试着关注它,但它不起作用:

代码语言:javascript
复制
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Article(Base):
    __tablename__ = 'article'
    aid = Column(INTEGER(unsigned=True, zerofill=True), 
                autoincrement=1001, primary_key=True)

那么,我怎么才能做到这一点呢?提前感谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-05-08 22:03:11

您可以通过使用DDLEvents。这将允许您在执行完下面的语句后立即运行其他SQL语句。CREATE TABLE跑了。请看链接中的示例,但我猜您的代码将类似于下面的代码:

代码语言:javascript
复制
from sqlalchemy import event
from sqlalchemy import DDL
event.listen(
    Article.__table__,
    "after_create",
    DDL("ALTER TABLE %(table)s AUTO_INCREMENT = 1001;")
)
票数 24
EN

Stack Overflow用户

发布于 2012-05-08 16:51:16

根据文件

自动增量-此标志可以设置为False,以指示不应被视为“自动增量”列的整数主键列,即在插入时隐式生成值的整数主键列,其值通常通过DBAPI cursor.lastrowid属性返回。它的默认值为True,以满足具有单个整数主键列的表的常见用例。

所以,autoincrement只是一个旗帜,用来让SQLAlchemy知道它是否是您想要递增的主键。

您要做的是创建一个自定义的自动增量序列。

所以,你的例子,我思考,应该类似于:

代码语言:javascript
复制
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.schema import Sequence

Base = declarative_base()

class Article(Base):
    __tablename__ = 'article'
    aid = Column(INTEGER(unsigned=True, zerofill=True), 
                 Sequence('article_aid_seq', start=1001, increment=1),   
                 primary_key=True)

注意,我不知道你是不是在用PostgreSQL或者不是,所以你应该记下following如果你是:

Sequence对象还实现了特殊的功能,以适应Postgresql的串行数据类型。PG中的序列类型自动生成在插入期间隐式使用的序列。这意味着,如果Table对象在其主键列上定义了一个序列,以便与Oracle和Firebird一起使用,则该序列将妨碍PG通常使用的“隐式”序列。对于这个用例,将标志optional=True添加到序列对象-这表明只有当数据库不提供生成主键标识符的其他选项时,才应该使用序列。

票数 20
EN

Stack Overflow用户

发布于 2014-05-16 02:37:02

我无法使用mysql和flask-migrate获得其他答案,所以我在迁移文件中执行了以下操作。

代码语言:javascript
复制
from app import db
db.engine.execute("ALTER TABLE myDB.myTable AUTO_INCREMENT = 2000;")

请注意,如果您重新生成了迁移文件,这将被覆盖。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10494033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档