#1 Tue 21 July 2015 09:44
- ecran64
- Participant occasionnel
- Date d'inscription: 18 Apr 2012
- Messages: 49
Spatialite: erreur création primary et foreign key
Bonjour,
Pour différentes raisons, je ne peux pas utiliser PostGis, du coup, je me rabats sur Spatialite. Sauf, que Spatialite a quelques limites. Il n'est pas possible de définir une clé primaire après coup.
J'aimerai lier 2 tables (une géographique et l'autre non géographique contenant la description des éléments) en utilisant Foreign Key.
Par contre, lorsque je lance la procédure ci-dessous, j'ai un message d'erreur:
Code:
Une erreur est apparue lors de l'exécution du code Python : Traceback (most recent call last): File "C:/Documents and Settings/XXXXXXX/.qgis2/python/plugins\QspatiaLite\QspatiaLiteApp.py", line 178, in runQuery header,data=self.db.executeQuery(query) File "C:/Documents and Settings/XXXXXXX/.qgis2/python/plugins\QspatiaLite\Classes\Database.py", line 51, in executeQuery cursor.execute(query,params) IntegrityError: column C_SGE_15 is not unique Version de Python : 2.7.4 (default, Apr 6 2013, 19:54:46) [MSC v.1500 32 bit (Intel)] Version de QGIS : 2.8.2-Wien Wien, 1b929ef Chemin vers Python : ['C:/Documents and Settings/XXXXXXX/.qgis2/python/plugins\\processing', 'C:/PROGRA~1/QGISWI~1/apps/qgis/./python', u'C:/Documents and Settings/XXXXXXX/.qgis2/python', u'C:/Documents and Settings/XXXXXXX/.qgis2/python/plugins', 'C:/PROGRA~1/QGISWI~1/apps/qgis/./python/plugins', 'C:\\PROGRA~1\\QGISWI~1\\bin\\python27.zip', 'C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\DLLs', 'C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib', 'C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\plat-win', 'C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\lib-tk', 'C:\\PROGRA~1\\QGISWI~1\\bin', 'C:\\PROGRA~1\\QGISWI~1\\apps\\Python27', 'C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages', 'C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\PIL', 'C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\jinja2-2.7.2-py2.7.egg', 'C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\markupsafe-0.23-py2.7-win32.egg', 'C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\python_dateutil-2.2-py2.7.egg', 'C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\pytz-2014.2-py2.7.egg', 'C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\win32', 'C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\win32\\lib', 'C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\Pythonwin', 'C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\Shapely-1.2.18-py2.7-win32.egg', 'C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\six-1.6.1-py2.7.egg', 'C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\wx-2.8-msw-unicode', u'C:/Documents and Settings/XXXXXXX/.qgis2//python', 'C:\\Documents and Settings\\XXXXXXX\\.qgis2\\python\\plugins\\DigitizingTools\\tools', 'C:\\Documents and Settings\\XXXXXXX\\.qgis2\\python\\plugins\\mmqgis/forms', 'C:\\PROGRA~1\\QGISWI~1\\apps\\qgis\\python\\plugins\\fTools\\tools', 'C:/XXX/MAJ_TBE_REB']
Est-ce que certains savent d'où peut-venir l'erreur et comment je peux faire pour la création de primary key et foreign key ?
(sachant que le champ C_SGE_15 est unique et non nul dans la table tMAJ_TBE_REB_15_2 et servirait pour lier à la table géographique).
Mes commandes de création de table et remplissage:
Code:
CREATE TABLE 'tMAJ_TBE_REB_15_2' ( 'C_SGE_09' TEXT, 'MODIF_15' INTEGER, 'TypModif15' TEXT, 'C_SGE_15' TEXT NOT NULL PRIMARY KEY, 'NOM_09' TEXT, 'NOM_15' TEXT, 'TBE_09' INTEGER, 'TBE_15' INTEGER, 'REB_09' INTEGER, 'REB_15' INTEGER, 'Espec_pres' TEXT, 'Obs_2009' TEXT, 'Obs_2015' TEXT) INSERT INTO "tMAJ_TBE_REB_15_1" ( 'C_SGE_09', 'MODIF_15', 'TypModif15', 'C_SGE_15', 'NOM_09', 'NOM_15', 'TBE_09', 'TBE_15', 'REB_09', 'REB_15', 'Espec_pres', 'Obs_2009', 'Obs_2015') SELECT 'C_SGE_09', 'MODIF_15', 'TypModif15', 'C_SGE_15', 'NOM_09', 'NOM_15', 'TBE_09', 'TBE_15', 'REB_09', 'REB_15', 'Espec_pres', 'Obs_2009', 'Obs_2015', FROM "Modifs_MAJ_TBE_REB_15"
Hors ligne
#2 Tue 21 July 2015 10:08
Re: Spatialite: erreur création primary et foreign key
Bonjour,
Pour résumer tu créer une table, tu l'as rempli et la colonne C_SGE_15 a des valeurs uniques. Puis tu fais une jointure et hop une erreur que tu as indiquée plus haut s'affiche ?
Y.
Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !! - GeoRezo vous aide ? Aidez GeoRezo !
Hors ligne
#3 Tue 21 July 2015 10:34
- ecran64
- Participant occasionnel
- Date d'inscription: 18 Apr 2012
- Messages: 49
Re: Spatialite: erreur création primary et foreign key
C'est au moment de la remplir que j'ai ce message d'erreur, j’essaie de définir la colonne C_SGE_15 en clé primaire, sachant qu'elle n'a que des valeurs unique et non nulles. Ce que je ne comprends pas, c'est que d'après le message "IntegrityError: column C_SGE_15 is not unique" il a l'air de considéré qu'ils y a des valeurs non uniques...
Ensuite, oui, j'aimerais faire la jointe avec une autre table en utilisant cette colonne C_SGE_15... pour que quand je créé un formulaire dans Qgis, il aille piocher les éléments dans la table contenant les descriptions des objets.
Hors ligne