Comment surmonter l'erreur de syntaxe en utilisant Sqlite3 UPSERT avec executemany dans un dictionnaire multidimensionnel python avec des clés comme espaces réservés?

Hmerman6006

J'ai un objet json que je reçois d'un serveur, qui est converti en dictionnaire multidimensionnel python dans une application kivy. Ce dictionnaire que je souhaite insérer dans ou mettre à jour en cas de conflit une table de données Sqlite3 en utilisant executemany(). Le problème est que je reçois un fichier near "ON": syntax error. Quelqu'un peut-il s'il vous plaît me donner des conseils sur la façon dont je peux résoudre ce problème?

J'ai essayé de supprimer les deux points de la requête VALUESet d'obtenir uniquement le dictionnaire.values ​​() sans succès.

Disposition multidimensionnelle du dictionnaire:

arr = {0: {'empid': 0, 'empname': 'employee0', 'empnumber': 2000}, 1: {'empid': 1, 'empname': 'employee1', 'empnumber': 2001}, 2: {'empid': 2, 'empname': 'employee2', 'empnumber': 2002}, 3: {'empid': 3, 'empname': 'employee3', 'empnumber': 2003}, 4: {'empid': 4, 'empname': 'employee4', 'empnumber': 2004}, 5: {'empid': 5, 'empname': 'employee5', 'empnumber': 2005}, 6: {'empid': 6, 'empname': 'employee6', 'empnumber': 2006}, 7: {'empid': 7, 'empname': 'employee7', 'empnumber': 2007}, 8: {'empid': 8, 'empname': 'employee8', 'empnumber': 2008}, 9: {'empid': 9, 'empname': 'employee9', 'empnumber': 2009}, 10: {'empid': 10, 'empname': 'employee10', 'empnumber': 2010}}

Datatable Sqlite:

import os
import sqlite3 as sl
    def create_emp_table(self, cur):
        cur.execute('CREATE TABLE IF NOT EXISTS emp_tb(\
                    emp_id INTEGER PRIMARY KEY NOT NULL,\
                    emp_names TEXT NOT NULL,\
                    emp_number TEXT NOT NULL UNIQUE)')

Requête SQLite:

    def insert_emp_name_data_mult(self,conn, cur, arr):
        sql_err = (sl.IntegrityError, sl.OperationalError, sl.ProgrammingError, sl.InterfaceError)
        try:
            query = "INSERT INTO emp_tb(emp_id, emp_names, emp_number)\
                        VALUES(:empid,:empname, :empnumber) ON CONFLICT (emp_id) DO UPDATE SET  emp_names=excluded.emp_names, emp_number.excluded.emp_number"
            cur.executemany(query, arr.values())
            conn.commit()
            return True
        except self.sql_err as err:
            print('error', err)
            cur.close()
            return False

Je voudrais insérer ou mettre à jour la table à l'aide de la clé de dictionnaire multidimensionnelle: paire de valeurs aussi efficacement que possible?

Shawn

La notation UPSERT que vous utilisez a été ajoutée à Sqlite dans la version 3.24, et vous utilisez 3.22, qui ne comprend pas la syntaxe.

Une alternative qui fonctionne sur les versions plus anciennes consiste à utiliser INSERT OR REPLACE. De la documentation :

Lorsqu'une violation de contrainte UNIQUE ou PRIMARY KEY se produit, l'algorithme REPLACE supprime les lignes préexistantes qui provoquent la violation de contrainte avant d'insérer ou de mettre à jour la ligne actuelle et la commande continue de s'exécuter normalement.

Alors, essayez d'utiliser

INSERT OR REPLACE INTO emp_tb(emp_id, emp_names, emp_number)
VALUES(:empid, :empname, :empnumber)

Cependant, puisque votre emp_numbercolonne est UNIQUE, cela n'agira pas tout à fait de la même manière, car le remplacement se déclenchera également en cas de conflit, pas seulement si la emp_idclé primaire le fait. Vous devrez décider vous-même si c'est un problème ou non.

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

TOP liste

  1. 1

    Microsoft.WebApplication.targets

  2. 2

    Exporter la table de l'arborescence vers CSV avec mise en forme

  3. 3

    Spring @RequestParam DateTime format comme ISO 8601 Date Heure facultative

  4. 4

    Comment analyser un hachage Ruby plat en un hachage imbriqué?

  5. 5

    Passer la taille d'un tableau 2D à une fonction ?

  6. 6

    Comment créer une nouvelle application dans Dropbox avec des autorisations complètes

  7. 7

    Algorithme: diviser de manière optimale une chaîne en 3 sous-chaînes

  8. 8

    Laravel SQLSTATE [HY000] [1049] Base de données inconnue 'previous_db_name'

  9. 9

    comment supprimer "compte de connexion google" à des fins de développement - actions sur google

  10. 10

    php ajouter et fusionner des données de deux tables

  11. 11

    Créer un système Buzzer à l'aide de python

  12. 12

    Existe-t-il un moyen de voir si mon bot est hors ligne ?

  13. 13

    Comment changer la couleur de la police dans R?

  14. 14

    Déplacement des moindres carrés d'ajustement pour les déplacements de points ayant des problèmes

  15. 15

    impossible d'obtenir l'image d'arrière-plan en plein écran dans reactjs

  16. 16

    Comment vérifier si un utilisateur spécifique a un rôle? Discord js

  17. 17

    comment afficher un bouton au-dessus d'un autre élément ?

  18. 18

    Comment choisir le nombre de fragments et de répliques Elasticsearch

  19. 19

    Comment ajouter une entrée à une table de base de données pour une combinaison de deux tables

  20. 20

    optimiser les opérations du serveur avec elasticsearch: traitement des filigranes de disque bas

  21. 21

    Comment analyser un fichier avec un tableau d'objets JSON en utilisant Node.js?

chaudétiquette

Archive