Как создать поле "GENERATED DEFAULT AS IDENTITY" в Firebird 3 через SQLAlchemy?

Я хочу создать идентификатор столбца с помощью SQLAlchemy.
SQL выглядит так:

CREATE TABLE OBJECT (
    ID INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    NAME VARCHAR(15)
)

Или как создать таблицу с автоинкрементным полем?

Column(autoincrement='auto')

по умолчанию для primary_key, но это не работает для Firebird.

Я добавляю FD B в GitHub.
В этой строке SQL-код, что нужно для этого, но я не знаю, как настроить Column в SQLAlchemy, чтобы использовать это.
Снимок экрана из IBExpert, показывающий, что создают после использования "GENERATED DEFAULT AS IDENTITY". Это не то же самое, что простой генератор.

0 ответов

Эта работа postgresql может работать:https://docs.sqlalchemy.org/en/13/dialects/postgresql.html

Я считаю, что вам придется изменить пример для firebird, изменив диалект компиляции следующим образом:

from sqlalchemy import MetaData
from sqlalchemy.schema import CreateColumn
from sqlalchemy.ext.compiler import compiles


@compiles(CreateColumn, 'firebird')
def use_identity(element, compiler, **kw):
    text = compiler.visit_create_column(element, **kw)
    text = text.replace("SERIAL", "INT GENERATED BY DEFAULT AS IDENTITY")
    return text

m = MetaData()
t = Table(
    't', m,
    Column('id', Integer, primary_key=True),
    Column('data', String)
)
Другие вопросы по тегам