I tried to simplify the code as much as i can. I did another simple sample of code wihtout columns and relationships (adding and removing) and seems working fine. There is an error with my code above but I cant figure out what.
El sábado, 26 de marzo de 2016, 18:05:23 (UTC+1), Mike Bayer escribió: > > > > On 03/26/2016 12:51 PM, Ricardo Champa wrote: > > Sorry, You are right. > > This seems like something I saw recently, you might want to check if > nuevo_tag isn't already in the session. But I can't re-identify the > problem without a much more concise and runnable example (remove all > columns, directives, and relationships not part of the problem, show use > of Session, etc). > > Again the best way to make this a one-email exchange is to follow the > guidelines in the http://stackoverflow.com/help/mcve document. > > > > > > > > I want to perform and *insert or update* but I always get this error: > > > > sqlalchemy.exc.IntegrityError: (raised as a result of Query-invoked > > autoflush; consider using a session.no_autoflush block if this flush > > is occurring prematurely) (pymysql.err.IntegrityError) (1062, > > "Duplicate entry > > '\\x11\\x0E\\x84\\x00\\xE2\\x9B\\x11\\xD4\\xA7\\x16DfUD\\x00\\x0D' > > for key 'PRIMARY'") [SQL: 'INSERT INTO tags (guid_tag, id_project, > > guid_item, type, created_at, updated_at) VALUES (%(guid_tag)s, > > %(id_project)s, %(guid_item)s, %(type)s, %(created_at)s, > > %(updated_at)s)'] [parameters: {'guid_item': > > b'\x11\x0e\x84\x00\xe2\x9b\x11\xd4\xa7\x16DfUD\x00"', 'id_project': > > 1, 'created_at': '2016-03-22 06:00:01', 'updated_at': '2016-03-23 > > 06:21:31', 'type': 0, 'guid_tag': > > b'\x11\x0e\x84\x00\xe2\x9b\x11\xd4\xa7\x16DfUD\x00\r'}] > > > > > > There is a row in DB that has the same PK, so I expect merge bring that > > record from DB but instead of it perform a new insert as error message > > shows. > > > > The whole definition of clases and models. > > > > |classItem(db.Model):__tablename__ ="items"# id_item = > > db.Column(db.Integer, autoincrement=True, primary_key=True)guid_item > > =db.Column(db.BINARY(16),primary_key=True)id_project > > =db.Column(db.Integer,db.ForeignKey("projects.id_project"))type > > =db.Column(db.Integer)name > > =db.Column(db.String(50),nullable=False,index=True)created_at > > =db.Column(db.DateTime)updated_at =db.Column(db.DateTime)__mapper_args__ > > > ={'polymorphic_identity':'items','polymorphic_on':type,'with_polymorphic':'*'}__table_args__ > > > > > =(db.UniqueConstraint('name','id_project',name='_unique_name_project'),)def__init__(self,creado_en=None):self.created_at > > > > =creado_en self.updated_at =creado_en classHub(Item):__tablename__ > > ="hubs"__mapper_args__ > > ={'polymorphic_identity':TYPE_HUB,'with_polymorphic':'*'}guid_hub > > > =db.Column(db.BINARY(16),db.ForeignKey(Item.guid_item),primary_key=True)location > > > > =db.Column(db.String(50))comments > > > =db.Column(db.String(128))def__init__(self,guid_hub=None,nombre=None,location=None,comments=None,id_project=None,creado_en=None,actualizado_en=None):self.type > > > > =TYPE_HUB self.guid_item =guid_hub self.guid_hub =guid_hub self.name > > =nombre self.id_project =id_project self.location =location > > self.comments =comments self.created_at =creado_en self.updated_at > > =actualizado_en classTag(db.Model):__tablename__ ="tags"guid_tag > > =db.Column(db.BINARY(16),primary_key=True)id_project > > =db.Column(db.Integer,db.ForeignKey("projects.id_project"))guid_item > > =db.Column(db.BINARY(16),db.ForeignKey("items.guid_item"))project > > > =db.relationship(Proyecto,backref=db.backref('list_tags',lazy='dynamic'))item > > > =db.relationship(Item,backref=db.backref('list_tags',lazy='joined'))type > > > =db.Column(db.Integer)#(0,hub);(1,cable);(2,pipe);(3,electrical_pipes)created_at > > > > =db.Column(db.DateTime)updated_at > > > =db.Column(db.DateTime)def__init__(self,guid_tag,project,item,type,created_at,updated_at):# > > > > self.guid_item = guid_tagself.guid_tag =guid_tag self.project =project > > self.item =item self.type =type self.created_at =created_at > > self.updated_at =updated_at| > > > > > > El sábado, 26 de marzo de 2016, 17:26:04 (UTC+1), Mike Bayer escribió: > > > > > > > > On 03/26/2016 12:06 PM, Ricardo Champa wrote: > > > AFAIK merge performs and |insert or update| so what I'm doing is > > pretty > > > simple. There is a relation of 1 to N between Hubs and Tags. So > > when I > > > try to make a merge on tag and hub, hub goes well and load from > > DB the > > > existent hub and make an update, but fails when > > > |db.session.merge(nuevo_tag)| is executed throwing an exception > > because > > > behind the scenes is try to make an insert, even if the tag > > previously > > > exist. What I did wrong? > > > > > > |nuevo_hub > > > > > > =Hub(guid_hub,name,location,comments,id_project,creado_en,actualizado_en)merged_hub > > > > > > > =db.session.merge(nuevo_hub)#db.session.commit() # If I use this > > line > > > tags perform an insert.nuevo_tag > > > > > > =Tag(guid_tag,project,merged_hub,TYPE_HUB,creado_en,actualizado_en)merged_tag > > > > > > =db.session.merge(nuevo_tag)db.session.commit()| > > > > nothing seems wrong with the small amount code pictured and also i > > don't > > know what exception you are getting, nor do I have enough context to > > understand the issue in general, so please provide minimal, working > > mappings and a demonstration per the guidelines at > > http://stackoverflow.com/help/mcve > > <http://stackoverflow.com/help/mcve>, thanks! > > > > > > > > > > -- > > > You received this message because you are subscribed to the > Google > > > Groups "sqlalchemy" group. > > > To unsubscribe from this group and stop receiving emails from it, > > send > > > an email to [email protected] <javascript:> > > > <mailto:[email protected] <javascript:> > <javascript:>>. > > > To post to this group, send email to [email protected] > > <javascript:> > > > <mailto:[email protected] <javascript:>>. > > > Visit this group at https://groups.google.com/group/sqlalchemy > > <https://groups.google.com/group/sqlalchemy>. > > > For more options, visit https://groups.google.com/d/optout > > <https://groups.google.com/d/optout>. > > > > -- > > You received this message because you are subscribed to the Google > > Groups "sqlalchemy" group. > > To unsubscribe from this group and stop receiving emails from it, send > > an email to [email protected] <javascript:> > > <mailto:[email protected] <javascript:>>. > > To post to this group, send email to [email protected] > <javascript:> > > <mailto:[email protected] <javascript:>>. > > Visit this group at https://groups.google.com/group/sqlalchemy. > > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.
