Probleme de variable Python/SQL sur ArcGIS
Fermé
Mr_cham
-
1 juin 2012 à 05:27
heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 - 1 juin 2012 à 08:55
heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 - 1 juin 2012 à 08:55
A voir également:
- Probleme de variable Python/SQL sur ArcGIS
- Citizen code python - Accueil - Outils
- Impossible de créer le fichier de travail. vérifiez la variable d'environnement temp ✓ - Forum Word
- Sql lister les tables ✓ - Forum Programmation
- Ce programme est écrit en python. il construit un mot secret dans une variable mais il ne l'affiche pas. modifiez-le pour qu'il affiche le mot secret. exécutez-le. quel est ce mot secret ? ✓ - Forum Python
2 réponses
Utilisateur anonyme
1 juin 2012 à 08:23
1 juin 2012 à 08:23
Bonjour
Je ne connais pas spécialement python, mais il est clair que quand tu écris '"TRACT"= i', le i est un simple caractère dans une chaine littérale(constante) et pas une variable. Il faut que tu crées une chaîne qui contienne la valeur de i, ce qui se fait en concaténant la partie constante de la chaine avec la valeur de la variable :
Si de plus, comme je le suppose, TRACT est le nom d'un champ, vérifie s'il faut bien des " autour du nom de champ (ça dépend des variantes de SQL). Avec mysql, il n'en faudrait pas :
Je ne connais pas spécialement python, mais il est clair que quand tu écris '"TRACT"= i', le i est un simple caractère dans une chaine littérale(constante) et pas une variable. Il faut que tu crées une chaîne qui contienne la valeur de i, ce qui se fait en concaténant la partie constante de la chaine avec la valeur de la variable :
'"TRACT"= ' + i
Si de plus, comme je le suppose, TRACT est le nom d'un champ, vérifie s'il faut bien des " autour du nom de champ (ça dépend des variantes de SQL). Avec mysql, il n'en faudrait pas :
'TRACT= ' + i
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
Modifié par heyquem le 1/06/2012 à 08:59
Modifié par heyquem le 1/06/2012 à 08:59
Bonjour,
Quelle version de Python utilises-tu ?
Avec Python 2.7, la tentative d'utiliser un objet qui n'existe pas donne le message d'erreur suivant:
NameError: name 'x' is not defined
Je ne crois pas que ton problème soit celui de l'inexistence d'un identifiant dans le code Python, mais plutôt de valeur de i qui doit être plus grande que le nombre de colonnes de la base de données.
Pour savoir à quoi t'en tenir , place simplement l'instruction
--------------------------
D'autre part, tu remarqueras qu'il n'y a pas le mot 'variable' ci-dessus. C'est un mot à proscrire en Python car il est casse-gueule.
Il n'y a pas de variable en Python au sens de "morceau de mémoire dont la valeur peut changer"
Ainsi ton expression "le nom de la ligne stockee dans une variable python " est une horreur en Python.
A la base, en Python, il n'y a que des objets dont la valeur de chacun est fixe une fois créés (ils sont immutables).
A un tel objet est attaché un nom dont la meilleure appellation est 'identifiant'.
Quant à sa nature, ce nom est comme une étiquette, il peut être collé sur un objet, en être décollé pour le coller sur un autre objet, mais en aucun cas la valeur d'un morceau de mémoire repéré par un nom donné ne change au cours de l'exécution d'un code Python.
Les autres langages procèdent en changeant les valeurs "dans" des variables, Python procède à une création d'objets et d'étiquettes qui valsent d'un objet à un autre. Quand un objet n'a plus d'étiquette, il est mort aux yeux du programme, le gestionnaire de mémoire récupère la place mémoire qu'il occupait.
Ainsi quand on écrit
- création d'un objet de valeur 10
- l'identifiant a est associé à cet objet
- un deuxième identifiant b est associé à l'objet que repère a
- résultat: un seul objet en mémoire, avec deux identifiants qui repèrent le même objet.
Si on écrit ensuite
En réalité, de façon sous-jacente, il y a un ballet de pointeurs. Les objets dits mutables en Python sont en réalité des collections de pointeurs vers les objets de base qui sont immutables.
Le seul usage acceptable du mot 'variable' en Python est celui de synonyme du mot 'nom' ou 'identifiant'. Mais comme l'ambiguïté avec le sens de "morceau de mémoire de valeur variable" existe, il vaut mieux éviter de l'employer, il perturbe la bonne compréhension de ce qui se passe vraiment.
Par exemple, quand on conçoit les identifiants comme désignant des morceaux de mémoire variable, on ne comprend pas le résultat du code suivant
Quelle version de Python utilises-tu ?
Avec Python 2.7, la tentative d'utiliser un objet qui n'existe pas donne le message d'erreur suivant:
NameError: name 'x' is not defined
Je ne crois pas que ton problème soit celui de l'inexistence d'un identifiant dans le code Python, mais plutôt de valeur de i qui doit être plus grande que le nombre de colonnes de la base de données.
Pour savoir à quoi t'en tenir , place simplement l'instruction
print iavant la ligne qui déclenche l'erreur.
--------------------------
D'autre part, tu remarqueras qu'il n'y a pas le mot 'variable' ci-dessus. C'est un mot à proscrire en Python car il est casse-gueule.
Il n'y a pas de variable en Python au sens de "morceau de mémoire dont la valeur peut changer"
Ainsi ton expression "le nom de la ligne stockee dans une variable python " est une horreur en Python.
A la base, en Python, il n'y a que des objets dont la valeur de chacun est fixe une fois créés (ils sont immutables).
A un tel objet est attaché un nom dont la meilleure appellation est 'identifiant'.
Quant à sa nature, ce nom est comme une étiquette, il peut être collé sur un objet, en être décollé pour le coller sur un autre objet, mais en aucun cas la valeur d'un morceau de mémoire repéré par un nom donné ne change au cours de l'exécution d'un code Python.
Les autres langages procèdent en changeant les valeurs "dans" des variables, Python procède à une création d'objets et d'étiquettes qui valsent d'un objet à un autre. Quand un objet n'a plus d'étiquette, il est mort aux yeux du programme, le gestionnaire de mémoire récupère la place mémoire qu'il occupait.
Ainsi quand on écrit
a = 10 b = aon ne crée pas deux emplacements mémoire ayant tous deux la même valeur 10, il se passe en fait:
- création d'un objet de valeur 10
- l'identifiant a est associé à cet objet
- un deuxième identifiant b est associé à l'objet que repère a
- résultat: un seul objet en mémoire, avec deux identifiants qui repèrent le même objet.
Si on écrit ensuite
a = 'kilo', l'identifiant a est détaché de l'objet 'entier 10' et collé sur l'objet chaîne nouvellement créé, l'objet 'entier 10' restant en vie parce qu'il y a toujopurs l'identifiant b qui lui est associé.
En réalité, de façon sous-jacente, il y a un ballet de pointeurs. Les objets dits mutables en Python sont en réalité des collections de pointeurs vers les objets de base qui sont immutables.
Le seul usage acceptable du mot 'variable' en Python est celui de synonyme du mot 'nom' ou 'identifiant'. Mais comme l'ambiguïté avec le sens de "morceau de mémoire de valeur variable" existe, il vaut mieux éviter de l'employer, il perturbe la bonne compréhension de ce qui se passe vraiment.
Par exemple, quand on conçoit les identifiants comme désignant des morceaux de mémoire variable, on ne comprend pas le résultat du code suivant
li = [1,2,3,4,5] la = li la[2] = 100 print li print laqui produit
[1,2,100,4,5] [1,2,100,4,5]