[英]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.