Gérez facilement les listes avec python + sqlite3

Il n'y a pas de type de liste dans sqlite3, donc par exemple, si vous voulez stocker une liste d'entiers, utilisez str (); pour la stocker dans une chaîne séparée (point-virgule) avec join (), et pour la récupérer, split () ) ʻEt ʻint () est requis.

Le module sqlite3 dispose d'un mécanisme pour enregistrer ces opérations à l'avance et les exécuter automatiquement si nécessaire.

Si vous savez que tous les types d'éléments de liste correspondent, vous pouvez gérer la liste de manière transparente en enregistrant la fonction de conversion en utilisant register_adapter () et register_converter (). ..

Dans l'exemple suivant, un type appelé ʻIntListest défini dans testtable, et la méthode de conversion avec le type de données python est enregistrée en utilisantregister_adapter ()etregister_converter (). Detect_types = sqlite3.PARSE_DECLTYPES` est requis lors de la connexion.

test.py


import sqlite3

CREATE_TABLE = u"""
create table if not exists testtable (
  id      integer primary key,
  intlist IntList
);
"""

IntList = list
sqlite3.register_adapter(IntList, lambda l: ';'.join([str(i) for i in l]))
sqlite3.register_converter("IntList", lambda s: [int(i) for i in s.split(';')])

def main():
    con = sqlite3.connect(":memory:", detect_types = sqlite3.PARSE_DECLTYPES)
    con.row_factory = sqlite3.Row
    con.execute(CREATE_TABLE)

    insert_list = [1,2,3]
    con.execute(u'insert into testtable values(?, ?)', (1, insert_list))
    con.commit()

    cur = con.cursor()
    cur.execute(u'select * from testtable;')
    assert insert_list == cur.fetchone()['intlist']

if __name__ == '__main__':
    main()

Bien sûr, register_adapter () et register_converter () peuvent également être utilisés avec des types définis par l'utilisateur. Référence: http://docs.python.jp/2/library/sqlite3.html#id6

Recommended Posts

Gérez facilement les listes avec python + sqlite3
Essayer de gérer SQLite3 avec Python [Note]
Gérez Excel avec python
Manipuler rabbimq avec python
Faites facilement un bip avec python
Facilement sans serveur avec Python en utilisant Calice
[Astuces] Gérez Athena avec Python
[Python] [SQLite3] Exploiter SQLite avec Python (basique)
Implémentez facilement des sous-commandes avec python click
Gérer les fichiers Excel CSV avec Python
Publiez facilement sur Twitter avec Python 3
Mettez des tampons de protocole dans sqlite avec python
Enregistrer / charger la base de données en mémoire avec sqlite3 de python
Traiter plusieurs listes avec for en Python
Téléchargez facilement des mp3 / mp4 avec python et youtube-dl!
FizzBuzz en Python3
Grattage avec Python
Statistiques avec python
Grattage avec Python
Python avec Go
Twilio avec Python
Intégrer avec Python
Jouez avec 2016-Python
AES256 avec python
Testé avec Python
python commence par ()
avec syntaxe (Python)
Sqlite en Python
Bingo avec python
Zundokokiyoshi avec python
Excel avec Python
Micro-ordinateur avec Python
Cast avec python
J'ai essayé des centaines de millions de SQLite avec python
Vous pouvez facilement créer une interface graphique même avec Python
Gérer les fichiers zip avec des noms de fichiers japonais dans Python 3
[Rust / Python] Gérer numpy avec PyO3 (version d'août 2020)
Premiers pas avec AWS IoT facilement en Python
Facile à créer une application console Python avec Click
[Python] Comment gérer les caractères japonais avec openCV
Comment gérer le type datetime dans sqlite3 de python
Communication série avec Python
Zip, décompressez avec python
Django 1.11 a démarré avec Python3.6
Jugement des nombres premiers avec Python
Communication de socket avec Python
Analyse de données avec python 2
Essayez de gratter avec Python.
Apprendre Python avec ChemTHEATER 03
Recherche séquentielle avec Python
"Orienté objet" appris avec python
Exécutez Python avec VBA
Manipuler yaml avec python
Résolvez AtCoder 167 avec python
Communication série avec python
[Python] Utiliser JSON avec Python
Apprendre Python avec ChemTHEATER 05-1
Exécutez prepDE.py avec python3
1.1 Premiers pas avec Python