gpt4 book ai didi

python - 提交后 SQLAlchemy 没有设置自动增量的主键

转载 作者:太空宇宙 更新时间:2023-11-03 12:47:29 26 4
gpt4 key购买 nike

我正在使用 SQLAlchemy连接到 postgresql 数据库。我已将 postgresql 中的主键列定义为 serial 类型即自动递增整数并在我的 SQLAlchemy 中标记它们模型与 primary_key=true .

关于提交 SQLAlchemy session,模型被保存到数据库中,我可以看到数据库中设置的主键,但是 id我的属性(property)SQLAlchemy模型对象的值始终为 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 上,但这也没有用。

最佳答案

原来我没看懂

session.merge(my_model)

session.add(my_model)

session.merge(my_model)(我一直在使用)不会将提供给它的对象添加到 session 中。相反,它返回一个新对象,即已添加到 session 中的合并模型。如果您引用这个新对象,一切都很好,即

my_model = session.merge(my_model)
另一方面,

add 将给定的对象添加到 session 中。

关于python - 提交后 SQLAlchemy 没有设置自动增量的主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27632308/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com