Как создать поле "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)
)