Создание автоинкремента столбца, когда автоинкремент не работает (Sqlalchemy, PostgreSQL) - PullRequest
0 голосов
/ 12 октября 2019

Я сделал простую таблицу с использованием sqlalchemy.

from sqlalchemy import create_engine  
from sqlalchemy.ext.declarative import declarative_base  
from sqlalchemy.orm import sessionmaker
from sqlalchemy import Table, Column, ForeignKey, MetaData, Sequence
from sqlalchemy.orm import relationship
from sqlalchemy import INTEGER, REAL, VARCHAR, TIMESTAMP, BOOLEAN, Integer
import psycopg2 as pg
import psycopg2.extras

db_string = "postgresql://someDBInfoString"
db = create_engine(db_string)
base = declarative_base()

Session = sessionmaker(db)    
session = Session()           

class Women(base):
    __tablename__ = "WOMEN"
    id = Column(Integer, primary_key=True)
    name = Column(VARCHAR)
    man = relationship("Men", uselist=False, back_populates="woman") 

Я попробовал несколько способов, как показано ниже, чтобы столбец id имел тип Serial или его эквивалент, который может автоинкрементироваться.

1) Установка его в PK

2) Добавление autoincrement=True ключевое слово arg

id = Column(Integer, autoincrement=True, primary_key=True)

3) Передача Sequence

id = Column(Integer, Sequence('seq_tramos_id', start=1, increment=1), primary_key=True)

Но в каждом методе столбец id устанавливается как простой тип Integer в СУБД, и для вставки данных через СУБД (Postgresql) необходимо вручную включить id вместе с другим значением. Вставка данных в ORM с использованием сеанса, как в session.add(somestring), не является проблемой, так как id автоматически устанавливается так, как я планировал. Так что это проблема того, как ORM-созданная таблица работает в СУБД.

Что еще можно попробовать?

edit: добавлен импорт и подробное описание

...