python 如何使用SQLAlchemy创建一个不是主键的标识列?

szqfcxe2  于 2023-03-16  发布在  Python
关注(0)|答案(2)|浏览(118)

如何在SQLAlchemy中创建一个标识列,使其自身自动递增并且不作为主键?
我用的是Postgres。

jrcvhitl

jrcvhitl1#

像这样的东西应该工作。

table_sequence = Sequence('table_id_seq', start=1)

class MyTable(Base):
    __tablename__ = 'mytable'

    id = Column(Integer, table_sequence, server_default=table_sequence.next_value())
smdnsysy

smdnsysy2#

从PostgreSQL 10.0开始,您可以为此使用标识列(以及主键)。
例如以下代码:

import sqlalchemy as sa

engine = sa.create_engine('postgresql:///test', echo=True)

tbl = sa.Table(
        't40959264',
        sa.MetaData(),
        sa.Column('id', sa.Integer, sa.Identity(always=True), primary_key=True),
        sa.Column('col', sa.Integer, sa.Identity(always=True, start=100, increment=10)),
        )
tbl.drop(engine, checkfirst=True)
tbl.create(engine)

with engine.connect() as conn:
    conn.execute(tbl.insert(), [{}] * 3)
    conn.commit()
    for row in conn.execute(sa.select(tbl)).mappings():
        print(row)

生成以下DDL:

CREATE TABLE t40959264 (
        id INTEGER GENERATED ALWAYS AS IDENTITY, 
        col INTEGER GENERATED ALWAYS AS IDENTITY (INCREMENT BY 10 START WITH 100), 
        PRIMARY KEY (id)
)

以及该输出:

{'id': 1, 'col': 100}
{'id': 2, 'col': 110}
{'id': 3, 'col': 120}

相关问题