设置 SQLAlchemy 自动增量起始值

新手上路,请多包涵

The autoincrement argument in SQLAlchemy seems to be only True and False , but I want to set the pre-defined value aid = 1001 , the通过自动增量 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)

那么,我怎样才能得到它?提前致谢!

原文由 Gorthon 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

您可以通过使用 DDLEvents 来实现。这将允许您在 CREATE TABLE 运行之后运行其他 SQL 语句。查看链接中的示例,但我猜您的代码将类似于以下内容:

 from sqlalchemy import event
from sqlalchemy import DDL
event.listen(
    Article.__table__,
    "after_create",
    DDL("ALTER TABLE %(table)s AUTO_INCREMENT = 1001;")
)

原文由 van 发布,翻译遵循 CC BY-SA 3.0 许可协议

根据 文档

autoincrement – 此标志可以设置为 False 以指示不应被视为“自动增量”列的整数主键列,即在 INSERT 时隐式生成值且其值通常通过返回的整数主键列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 ,因此如果您是,则应注意 以下 事项:

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

原文由 Edwardr 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏