簡體   English   中英

SQLAlchemy在提交后不從自動增量設置主鍵

[英]SQLAlchemy not setting primary key from auto increment after commit

我正在使用SQLAlchemy連接到postgresql數據庫。 我已經將postgresql中的主鍵列定義為serial類型,即自動遞增整數,並在我的SQLAlchemy模型中使用primary_key=true標記它們。

在提交SQLAlchemy會話時,模型被保存到數據庫中,我可以看到數據庫中的主鍵集,但我的SQLAlchemy模型對象上的id屬性始終具有None值,即它沒有獲取自動增量值。 我不確定我的錯誤。

我查看了現有的SO問題,但沒有找到答案:

我的代碼如下:

在postgres中創建表:

CREATE TABLE my_model
(
    id serial NOT NULL,
    type text,
    user_id integer,

    CONSTRAINT pk_network_task PRIMARY KEY (id)
)
WITH (
  OIDS=FALSE
);

設置SQLAlchemy和模型:

from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()

engine = create_engine(db_url, convert_unicode=True, echo=True)
session = scoped_session(sessionmaker(autocommit=False, autoflush=False, bind=engine))

class MyModel(Base):
    __tablename__ = 'my_model'

    id = sa.Column(sa.Integer, primary_key=True)
    user_id = sa.Column(sa.Integer)
    type = sa.Column(sa.String)

嘗試並存儲模型:

my_model = MyModel()
user_id = 1
type = "A type"
session.merge(my_model)
session.commit()
my_model.id #Always None, don't know why

提交后my_model.id仍為None 我也嘗試在會話上調用close ,但這也不起作用。

結果我不明白之間的區別

session.merge(my_model)

session.add(my_model)

session.merge(my_model) (我一直在使用)不會將給定的對象添加到會話中。 相反,它返回一個新對象,即已添加到會話中的合並模型。 如果你引用這個新對象一切都很好,即

my_model = session.merge(my_model)

add ,另一方面,增加了給它到會話的對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM