首页 >

Python + SQLAlchemy + MySQL出现IntegrityError, Duplicate ent

数据库|mysql教程Python + SQLAlchemy + MySQL出现IntegrityError, Duplicate ent
Python,SQLAlchemy,MySQL,出现,Int
数据库-mysql教程
手游源码二次开发侵权,ubuntu检查磁盘大小,python爬虫黑产,基本php,网站 seo收录lzw
今天用SQLAlchemy更新数据库的时候遇到一个Error: Firebug: WebError Traceback: ? IntegrityError: (IntegrityError) (1062, Duplicate entry ’14-0′ for key ‘idx_sid_view’) ‘INSERT INTO template (schema_id, view, template, update_time) VALUES (%s
分类网源码,vscode c 格式,hp不支持ubuntu系统,tomcat监控接口,sqlite最大存储大小,emlog淘宝客插件,jquery前端框架下载,爬虫学家研究什么虫,php 获取键值对,农业seo推广,听书网站源码,jquery锁定网页,时尚网页模板,会计从业模拟考试系统 源程序lzw
淘宝网站php源码下载,ubuntu软件图标变红,tomcat日志太多怎么办,开箱爬虫视频,php框架技术教程学习,营口seo恢复lzw
今天用SQLAlchemy更新数据库的时候遇到一个Error:

Firebug:

WebError Traceback:
? IntegrityError: (IntegrityError) (1062, “Duplicate entry ’14-0′ for key ‘idx_sid_view'”) ‘INSERT INTO template (schema_id, view, template, update_time) VALUES (%s, %s, %s, %s)’ (14, 0, ‘this is a new view message.’, None)

Log:

17:21:55,461 INFO [sqlalchemy.engine.base.Engine] [worker 5]BEGIN (implicit)
17:21:55,461 INFO [sqlalchemy.engine.base.Engine] [worker 5]
INSERT INTO template (schema_id, view, template, update_time) VALUES (%s, %s, %s, %s)
17:21:55,461 INFO [sqlalchemy.engine.base.Engine] [worker 5] (14, 0, ‘this is a new view message.’, None)
17:21:55,463 INFO [sqlalchemy.engine.base.Engine] [worker 5]
ROLLBACK

由于是更新数据库,所以在Python里面是这样写的:

Session.merge(newtpl)

Session.commit()

怎么找都不知道哪里错了。。。

后来后来仔细想了想,然后去看了下表结构才想明白。原来是这样。

表结构是这样的,

我在更新的时候直插入了schema_id, view, template这3个字段,但是作为主键的id字段没有更新,所以出现了上面的错误。

然后改正就简单了。

把原始表里面的数据的id读出来,更新的时候把id放在要更新的字段,这样就OK了。

类似于下图这样:

现在就成功了,再看看log:

17:52:36,729 INFO [sqlalchemy.engine.base.Engine] [worker 2] BEGIN (implicit)
17:52:36,730 INFO [sqlalchemy.engine.base.Engine] [worker 2]
SELECT template.id AS template_id, template.schema_id AS template_schema_id, template.view AS template_view, template.template AS template_template, template.update_time AS template_update_time
FROM template
WHERE template.schema_id = %s AND template.view = %s
LIMIT %s
17:52:36,730 INFO [sqlalchemy.engine.base.Engine] [worker 2] (14, 0, 1)
17:52:36,732 INFO [sqlalchemy.engine.base.Engine] [worker 2]
UPDATE template SET template=%s WHERE template.id = %s
17:52:36,732 INFO [sqlalchemy.engine.base.Engine] [worker 2] (‘ffffff, this is a merge test.again’, 14949L)
17:52:36,734 INFO [sqlalchemy.engine.base.Engine] [worker 2]
COMMIT

一些有用的东西:

1、merge的使用:数据库表中存在此记录,主要是用来更新数据表的某个记录。即将表中的数据与源表对比,如果存在记录,则根据源表中的值更新目标表中的数据,如果不存在的话,则新增入目标表中。通过MERGE语句,根据一张表或子查询的连接条件对另外一张表进行查询,连接条件匹配上的进行UPDATE,无法匹配的执行INSERT。这个语法仅需要一次全表扫描就完成了全部工作,执行效率要高于INSERT+UPDATE。

2、SQLAlchemy中对数据库操作常用的几条语句:

Session.query(table)Session.add(record)Session.merge(record)Session.delete(record)Session.commit()

Python + SQLAlchemy + MySQL出现IntegrityError, Duplicate ent
  • 把MySQL表结构映射为Python中的对象的教程
  • 把MySQL表结构映射为Python中的对象的教程 | 把MySQL表结构映射为Python中的对象的教程 ...

    Python + SQLAlchemy + MySQL出现IntegrityError, Duplicate ent
  • Python的ORM框架SQLAlchemy入门教程
  • Python的ORM框架SQLAlchemy入门教程 | Python的ORM框架SQLAlchemy入门教程 ...

    Python + SQLAlchemy + MySQL出现IntegrityError, Duplicate ent
  • python第六十六天--sqlalchemy
  • python第六十六天--sqlalchemy | python第六十六天--sqlalchemy ...