autoincrementSQLAlchemy中的参数似乎只是True和False,但我想设置预定义的值aid = 1001,via自动增量aid = 1002当下一次插入完成时。
在SQL中,可以更改为:
ALTER TABLE article AUTO_INCREMENT = 1001;我正在使用MySQL我试着关注它,但它不起作用:
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)那么,我怎么才能做到这一点呢?提前感谢!
发布于 2012-05-08 22:03:11
您可以通过使用DDLEvents。这将允许您在执行完下面的语句后立即运行其他SQL语句。CREATE TABLE跑了。请看链接中的示例,但我猜您的代码将类似于下面的代码:
from sqlalchemy import event
from sqlalchemy import DDL
event.listen(
Article.__table__,
"after_create",
DDL("ALTER TABLE %(table)s AUTO_INCREMENT = 1001;")
)发布于 2012-05-08 16:51:16
根据文件:
自动增量-此标志可以设置为False,以指示不应被视为“自动增量”列的整数主键列,即在插入时隐式生成值的整数主键列,其值通常通过DBAPI cursor.lastrowid属性返回。它的默认值为True,以满足具有单个整数主键列的表的常见用例。
所以,autoincrement只是一个旗帜,用来让SQLAlchemy知道它是否是您想要递增的主键。
您要做的是创建一个自定义的自动增量序列。
所以,你的例子,我思考,应该类似于:
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添加到序列对象-这表明只有当数据库不提供生成主键标识符的其他选项时,才应该使用序列。
发布于 2014-05-16 02:37:02
我无法使用mysql和flask-migrate获得其他答案,所以我在迁移文件中执行了以下操作。
from app import db
db.engine.execute("ALTER TABLE myDB.myTable AUTO_INCREMENT = 2000;")请注意,如果您重新生成了迁移文件,这将被覆盖。
https://stackoverflow.com/questions/10494033
复制相似问题