2017-10-12 2 views
1

J'utilise pymssql dans mon projet django pour me connecter à une base de données. J'essaie d'utiliser la méthode execute() pour faire un insert.
Cependant je reçois cette erreur:pymssql INSERT n'incrémentera pas automatiquement ID

Cannot insert the value NULL into column 'ID', table ITEMS

la colonne ID est la clé primaire et donc il doit être rempli par le sql lui-même que je comprends. voici ma commande d'insertion:

bill_id = execute(""" 
     INSERT INTO ITEMS(COlUMN1,COlUMN2, COlUMN3,COlUMN4,COlUMN5) 
     VALUES (%d, %d, %d, %d, %d); 
     """, (1713, 6, 929, 1184, 25)) 

et aucun de ces colonnes sont ID. quelqu'un peut-il me dire ce qui ne va pas?

+1

Pourquoi ne pas utiliser les modèles de Django pour interagir avec la base de données? – mhawke

+0

@mhawke Je ne peux pas faire ça. Je travaille sur un assez gros projet et ce n'est pas mon appel. –

+1

Si la table n'a pas été créée par Django, il se peut que le champ ID n'ait pas défini 'AUTO_INCREMENT'. Vous devrez soit spécifier l'ID, soit modifier la colonne pour qu'elle s'incrémente automatiquement. – Alasdair

Répondre

3

Si la colonne id n'est pas une colonne de clé à incrémentation automatique, elle ne fonctionnera pas. Si vous définissez une colonne dans SQL dans une instruction create table, il ne s'agit pas automatiquement d'une colonne auto-incrémentée. Vous devez le définir. Peut-être devriez-vous faire d'abord une requête pour obtenir la valeur maximale de la colonne id. À la seconde, vous pouvez incrémenter la valeur et ajouter la colonne primaire à votre instruction d'insertion.

J'ai trouvé ce lien pour utiliser django meta data api.

https://docs.djangoproject.com/en/1.9/ref/models/meta/#migrating-from-the-old-api

+0

merci, c'est ce que j'ai fait par la suite, mais je n'arrive toujours pas à comprendre pourquoi l'identifiant n'est pas défini par sql. la colonne est incrémentée automatiquement, donc elle devrait être incrémentée de lui-même. –

+0

Ok, c'est une base de données MySQL. – michaeldbjava

+0

Essayez ce qui suit pour montrer la structure de la table. https://dev.mysql.com/doc/refman/5.7/en/show-columns.html – michaeldbjava