2009-08-21 10 views
0

J'ai besoin d'insérer un tuple python (de floats) dans une base de données MySQL. En principe, je pourrais le décaper et l'insérer comme une chaîne, mais cela ne me donnerait la chance que de le récupérer par Python. L'alternative est de sérialiser le tuple en XML et de stocker la chaîne XML.Insérer un tuple python dans une base de données MySQL

Selon vous, quelles solutions seraient également possibles, en vue de stocker d'autres éléments (par exemple une liste ou un objet). Le récupérer à partir d'autres langues est un plus.

Répondre

2

Je chercherais à le sérialiser en JSON, en utilisant le paquet simplejson, ou le paquet intégré json dans python 2.6.

Il est simple à utiliser en python, importable par pratiquement toutes les autres langues, et vous n'avez pas besoin de faire tout le "quel tag dois-je utiliser? Quels attributs devrait-il avoir?" décisions que vous pourriez en XML.

+0

Le problème avec JSON est qu'il réduit tout à une chaîne. Si j'ai un tuple d'entiers, j'aimerais le récupérer sous la forme d'un tuple d'entiers, pas comme un tuple de chaînes. En javascript, cela ne fait pas beaucoup de différence, car il est lâche, mais en python, c'est une histoire différente. Donc non, JSON n'est pas une option dans ce cas. –

+1

JSON n'exige pas que tout soit une chaîne. Il utilise des types natifs JavaScript: string, int, float, boolean, null. –

+0

oh, cela change les choses alors. –

2

Que diriez-vous de JSON ... il est compact, et il y a des interprètes disponibles pour cela dans la plupart des langues.

3

Créer une autre table et faire un à plusieurs. N'essayez pas d'entasser une fonctionnalité de langage de programmation dans une base de données si vous pouvez l'éviter.

Si vous avez absolument besoin de pouvoir stocker un objet sur la ligne, vos options sont un peu plus limitées. YAML est probablement le meilleur équilibre entre lisible par un humain et lisible par un programme, et il a une certaine syntaxe pour spécifier les classes que vous pourriez utiliser.

+0

oui vous avez un point, cependant. Supposons que je dois exprimer une coordonnée xyz pour un point, et j'ai une ligne pour chaque point. vous auriez deux choix: soit avoir trois colonnes différentes, pour x y et z, ou vous stockez le tupòle comme une seule entité dans une colonne. Dans ce cas, les choses sont faciles car vous savez combien d'éléments font votre tuple (trois) mais dans mon cas, je ne connais pas a priori. Je pourrais faire un un à plusieurs et insérer chaque élément du tuple, vous avez raison, mais je crains que cela ne fasse que déplacer le problème (par exemple, supposons que j'ai un tuple de tuples) –

+0

Ceci est différent, bien qu'un cas étrange. S'en tenir à la recommandation de YAML, alors. Facile à lire et à écrire, possède des liaisons avec une bibliothèque C dans la plupart des langues, respecte les types de données et prend en charge des noms de classe définis par l'utilisateur. – Eevee

Questions connexes