Je veux que 3 colonnes aient 9 valeurs différentes, comme une liste en Python. Est-ce possible? Si ce n'est pas dans SQLite, alors sur un autre moteur de base de données?Est-il possible d'enregistrer une liste de valeurs dans une colonne SQLite?
Répondre
Vous devez sérialiser la liste (ou un autre objet Python) dans une chaîne d'octets, alias « blob » ;-), par vos moyens préférés (marshal
est bon pour les listes de valeurs élémentaires telles que des numéros ou des chaînes & c, cPickle
si vous voulez une solution très générale, etc.), et désérialisez-la lorsque vous la récupérez. Bien sûr, qui porte essentiellement la liste (ou un autre objet Python) comme une « charge utile » passive - ne peut pas utiliser de façon significative dans WHERE
clauses, ORDER BY
, etc.
bases de données relationnelles juste ne traitent pas bien tout ce qui avec des valeurs non-atomiques et préférerait d'autres alternatives normalisées (stockez les éléments de la liste dans une table différente qui inclut une colonne "listID", placez le "listID" dans votre table principale, etc.). Les bases de données non relationnelles, bien qu'elles aient généralement des limitations par rapport aux bases relationnelles (par exemple, aucune jointure), peuvent offrir une prise en charge plus directe de vos besoins.
Certains DB relationnels ont des extensions non relationnelles. Par exemple, PostGreSQL supporte un type de données array (pas aussi général que les listes de Python - les tableaux de PgSQL sont intrinsèquement homogènes).
Généralement, vous le faites en stringifiant la liste (avec repr()), puis en sauvegardant la chaîne. En lisant la chaîne de la base de données, utilisez eval() pour recréer la liste. Soyez prudent, même si vous êtes certain qu'aucune donnée générée par l'utilisateur ne peut entrer dans la colonne, ou eval() est un risque de sécurité.
Votre question est difficile à comprendre. La voici encore:
Je veux que 3 colonnes aient 9 valeurs différentes, comme une liste en Python. C'est possible? Si ce n'est pas dans SQLite, alors sur un autre moteur de base de données?
Voici ce que je crois que vous demandez: est-il possible de prendre une liste Python de 9 valeurs différentes, et enregistrer les valeurs sous une colonne particulière dans une base de données?
La réponse à cette question est "oui". Je suggère d'utiliser une bibliothèque Python ORM au lieu d'essayer d'écrire le code SQL vous-même. Ce code exemple utilise Autumn:
import autumn
import autumn.util
from autumn.util import create_table
# get a database connection object
my_test_db = autumn.util.AutoConn("my_test.db")
# code to create the database table
_create_sql = """\
DROP TABLE IF EXISTS mytest;
CREATE TABLE mytest (
id INTEGER PRIMARY KEY AUTOINCREMENT,
value INTEGER NOT NULL,
UNIQUE(value)
);"""
# create the table, dropping any previous table of same name
create_table(my_test_db, _create_sql)
# create ORM class; Autumn introspects the database to find out columns
class MyTest(autumn.model.Model):
db = my_test_db
lst = [3, 6, 9, 2, 4, 8, 1, 5, 7] # list of 9 unique values
for n in lst:
row = MyTest(value=n) # create MyTest() row instance with value initialized
row.save() # write the data to the database
Exécutez ce code, puis quittez Python et exécuter sqlite3 my_test.db
. Ensuite, exécutez cette commande SQL dans SQLite: select * from mytest;
Voici le résultat:
1|3
2|6
3|9
4|2
5|4
6|8
7|1
8|5
9|7
Cet exemple tire des valeurs d'une liste, et utilise les valeurs pour remplir une colonne de la base de données. Il pourrait être étendu de manière triviale pour ajouter des colonnes supplémentaires et les peupler également.
Si ce n'est pas la réponse que vous cherchez, veuillez reformuler votre demande pour clarifier.
P.S. Cet exemple utilise autumn.util
. Le setup.py
inclus avec la version actuelle d'Automne n'installe pas util.py
au bon endroit; Vous devrez terminer l'installation d'Automne à la main.
Vous pouvez utiliser un ORM plus mature tel que SQLAlchemy ou l'ORM de Django. Cependant, j'aime vraiment Autumn, surtout pour SQLite.
- 1. Comment insérer plusieurs valeurs dans une seule colonne à l'aide de sqlite?
- 2. SQLite - stockage de plusieurs valeurs
- 3. comparer une colonne à une liste de valeurs dans t-sql
- 4. Feuille de calcul: compte les valeurs répétées dans une colonne
- 5. UltraWebGrid: Comment utiliser une liste déroulante dans une colonne
- 6. Comment ajouter une colonne dans une table de base de données sqlite 2
- 7. SQL: filtre sur une combinaison de deux valeurs de colonne
- 8. Récupérer une liste de valeurs de SQL Server à Infopath
- 9. SQLite - comment obtenir une valeur moyenne?
- 10. Comment avoir deux valeurs pour une colonne dans la grille
- 11. Parse une liste d'attributs/valeurs en PHP
- 12. SQL Server: trier une colonne numériquement si possible, sinon alpha
- 13. Insérer Max Valeur de la colonne dans une autre colonne
- 14. Colonne personnalisée dans la liste
- 15. Java - mapper une liste d'objets à une liste avec des valeurs de leurs attributs propriété
- 16. est-il possible d'ajouter une liste à une structure?
- 17. valeurs de colonne par défaut dans Linq2Sql
- 18. Récupérer une colonne SET MySQL comme une liste de décalages entiers
- 19. Linq: Recherche d'un moyen efficace pour rechercher une colonne dans une liste de mots
- 20. est-il possible de modifier le texte dans une colonne listview?
- 21. Soustraction de la valeur minimale de toutes les valeurs dans une colonne
- 22. Valeurs de colonnes dupliquées dans une table
- 23. Comment obtenir une liste de constantes dans une classe et leurs valeurs
- 24. comment envelopper (préfixe et suffixe) toutes les valeurs dans une colonne avec une chaîne?
- 25. Max DateTime dans une liste
- 26. SharePoint: Comment avoir une contrainte unique dans une liste?
- 27. Comment renommer une table dans SQLite 3.0?
- 28. Dans SQLite, comment définir une colonne par défaut comme étant l'utilisateur actuel?
- 29. Comment limiter les valeurs acceptables dans une colonne de base de données de 1 à 5?
- 30. Liste une liste dans la liste
merci.Je pense que je vais redessiner ma base de données pour avoir une table séparée, car je dois pouvoir utiliser les valeurs dans une clause 'WHERE'. – john2x