python – SQLAlchemy在提交后不从自动增量设置主键
发布时间:2020-12-20 11:39:36 所属栏目:Python 来源:网络整理
导读:我正在使用SQLAlchemy连接到 postgresql数据库.我已经将postgresql中的主键列定义为serial类型,即自动递增整数,并在我的SQLAlchemy模型中使用primary_key = true标记它们. 在提交SQLAlchemy会话时,模型被保存到数据库中,我可以看到数据库中的主键集,但我的SQ
我正在使用SQLAlchemy连接到
postgresql数据库.我已经将postgresql中的主键列定义为serial类型,即自动递增整数,并在我的SQLAlchemy模型中使用primary_key = true标记它们.
在提交SQLAlchemy会话时,模型被保存到数据库中,我可以看到数据库中的主键集,但我的SQLAlchemy模型对象上的id属性始终具有None值,即它没有获取自动增量值.我不确定我的错误. 我查看了现有的SO问题,但没有找到答案: > Set SQLAlchemy to use PostgreSQL SERIAL for identity generation 我的代码如下: 在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) 另一方面,将添加的对象添加到会话中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |