Python + SQLAlchemy + MySQL出现IntegrityError, Duplicate ent
今天用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
今天用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()

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Les fichiers journaux du système Debian sont des ressources précieuses pour les administrateurs système et les développeurs pour diagnostiquer les problèmes et surveiller l'état de fonctionnement du système. Cet article se concentrera sur certaines informations de journal clés qui ne peuvent pas être ignorées. Journaux système de base (généralement situés dans / var / log / syslog ou / var / log / messages) Ces journaux enregistrent les activités de base du système, y compris: démarrage du système et événements d'arrêt: version du noyau de journal, résultats de détection matérielle, etc., pour aider à suivre les défaillances de démarrage ou les exceptions d'arrêt. Alertes de défaillance matérielle: telles que les erreurs de disque, les problèmes de mémoire, etc., pour détecter rapidement des problèmes matériels potentiels. Modifications de l'état du service: enregistrez les événements de démarrage, d'arrêt et de redémarrage du service pour faciliter la surveillance de la santé du service. Historique de connexion / déconnexion de l'utilisateur:

Chargement des fichiers de cornichons dans Python 3.6 Rapport de l'environnement Erreur: modulenotFoundError: NomoduLenamed ...

Cet article explique comment optimiser les performances du site Web sur Debian Systems. "Debianstrings" n'est pas un terme standard et peut se référer aux outils ou technologies utilisés dans Debian Systems pour améliorer les performances du site Web. Voici quelques conseils pratiques: 1. Il est recommandé d'utiliser le panneau Pagoda pour simplifier le processus d'installation et de configuration pour le serveur Web et la configuration de l'environnement PHP. Il est recommandé d'installer Nginx1.22.1 en tant que serveur Web, PHP8.2 comme interprète de script et MySQL10.7.3-MariaDB comme système de base de données. Assurez-vous d'activer les extensions de PHP nécessaires, telles que FileInfo, Opcache, Memcached, Red

"Debianstrings" n'est pas un terme standard, et sa signification spécifique n'est pas encore claire. Cet article ne peut pas commenter directement la compatibilité de son navigateur. Cependant, si "DebianStrings" fait référence à une application Web exécutée sur un système Debian, sa compatibilité du navigateur dépend de l'architecture technique de l'application elle-même. La plupart des applications Web modernes se sont engagées à compatibilité entre les navigateurs. Cela repose sur les normes Web suivantes et l'utilisation de technologies frontales bien compatibles (telles que HTML, CSS, JavaScript) et les technologies back-end (telles que PHP, Python, Node.js, etc.). Pour s'assurer que l'application est compatible avec plusieurs navigateurs, les développeurs doivent souvent effectuer des tests croisés et utiliser la réactivité

Dans le cadre du cadre de beegoorm, comment spécifier la base de données associée au modèle? De nombreux projets Beego nécessitent que plusieurs bases de données soient opérées simultanément. Lorsque vous utilisez Beego ...

La modification du contenu XML nécessite une programmation, car elle nécessite une recherche précise des nœuds cibles pour ajouter, supprimer, modifier et vérifier. Le langage de programmation dispose de bibliothèques correspondantes pour traiter XML et fournit des API pour effectuer des opérations sûres, efficaces et contrôlables comme les bases de données de fonctionnement.

Pour les petits fichiers XML, vous pouvez remplacer directement le contenu d'annotation par un éditeur de texte; Pour les fichiers volumineux, il est recommandé d'utiliser l'analyseur XML pour le modifier pour garantir l'efficacité et la précision. Soyez prudent lors de la suppression des commentaires XML, le maintien des commentaires aide généralement à coder la compréhension et la maintenance. Les conseils avancés fournissent un exemple de code Python pour modifier les commentaires à l'aide de l'analyseur XML, mais l'implémentation spécifique doit être ajustée en fonction de la bibliothèque XML utilisée. Faites attention aux problèmes d'encodage lors de la modification des fichiers XML. Il est recommandé d'utiliser le codage UTF-8 et de spécifier le format de codage.

Deux solutions pour la cohérence des données entre MySQL et REDIS: Détravé la double suppression et la modification d'abord de la base de données, puis la suppression du cache sont utilisées pour gérer les problèmes de cohérence des données dans MySQL et Redis, ...
