[PYTHON] Comment lire les définitions de table générées dynamiquement à l'aide de SQL Alchemy

Comment lire les définitions de table générées dynamiquement à l'aide de SQL Alchemy

Je veux faire le titre! Je l'ai recherché, alors j'ai pris note. En conclusion, ce n'est pas grave si vous créez un objet de mappage à l'aide du type de fonction intégré. Par exemple, écrivez comme ceci.

engine = create_engine(URL de la base de données, echo=True, encoding='utf-8')
base = declarative_base(engine)

dic = {
    '__tablename__':nom de la table,
    '__table_args__': {'autoload': True}}}
obj = type('MyObject', (base,), dic)

Le but est de définir autoload = True pour créer un mappage à partir d'une table existante.

échantillon

Exemple de code

sql_sample.py


# -*- coding: utf-8 -*-
from sqlalchemy import *
from sqlalchemy.orm import *
from sqlalchemy.ext.declarative import declarative_base

schema = 'sqlite:///test.db'

engine = create_engine(schema, echo=False, encoding='utf-8')
base = declarative_base(engine)
session = sessionmaker(bind=engine)()

management_dic = {
    '__tablename__': 'management',
    '__table_args__': {'autoload': True}}
management_object = type('management_object', (base,), management_dic)
fetch_management = session.query(management_object).all()

for management_row_object in fetch_management:
    folder_table_dic = {
        '__tablename__': management_row_object.folder_table_name,
        '__table_args__': {'autoload': True}}
    folder_object_name = management_row_object.folder_table_name.encode('utf-8')
    folder_object = type(folder_object_name, (base,), folder_table_dic)
    fetch_folder = session.query(folder_object).all()

    print "-" * 32
    print "table_name: %s" % folder_object_name
    print "-" * 32
    for row in fetch_folder:
        print "  fid: %s,  file_name: %s" % (row.fid, row.file_name)
    print

Paramètres de base de données pour utiliser un exemple de code

Une table qui gère les tables créées dynamiquement (gestion)

tid folder_table_id
0 folder_0000
1 folder_0001

management.sql


CREATE TABLE management(
    tid INTEGER NOT NULL PRIMARY KEY,
    folder_table_name TEXT NOT NULL);
INSERT INTO management(tid, folder_table_name) VALUES (0,'folder_0000');
INSERT INTO management(tid, folder_table_name) VALUES (1,'folder_0001');

Table générée dynamiquement (folder_0000)

fid file_name
0 ham.txt
1 spam.txt
2 egg.txt

folder_0000.sql


CREATE TABLE folder_0000(
    fid INTEGER NOT NULL PRIMARY KEY,
    file_name TEXT NOT NULL
);
INSERT INTO folder_0000(fid, file_name) VALUES (0,'ham.txt');
INSERT INTO folder_0000(fid, file_name) VALUES (1,'spam.txt');
INSERT INTO folder_0000(fid, file_name) VALUES (2,'egg.txt');

Table générée dynamiquement (dossier_0001)

fid file_name
0 foo.txt
1 bar.txt

folder_0001.sql


CREATE TABLE folder_0001(
    fid INTEGER NOT NULL PRIMARY KEY,
    file_name TEXT NOT NULL
);
INSERT INTO folder_0001(fid, file_name) VALUES (0,'foo.txt');
INSERT INTO folder_0001(fid, file_name) VALUES (1,'bar.txt');

Exécutez l'exemple

sqlite3 test.db < management.sql
sqlite3 test.db < folder_0000.sql
sqlite3 test.db < folder_0001.sql
python sql_sample.py

Exemple de résultat d'exécution

--------------------------------
table_name: folder_0000
--------------------------------
  fid: 0,  file_name: ham.txt
  fid: 1,  file_name: spam.txt
  fid: 2,  file_name: egg.txt

--------------------------------
table_name: folder_0001
--------------------------------
  fid: 0,  file_name: foo.txt
  fid: 1,  file_name: bar.txt

référence

Python> Documentation> Bibliothèque standard Python> 2. Fonctions intégrées Dynamically setting _tablename_ for sharding in SQLAlchemy?

Recommended Posts

Comment lire les définitions de table générées dynamiquement à l'aide de SQL Alchemy
Comment lire PyPI
Comment lire JSON
Obtenez la table dynamiquement avec sqlalchemy
Comment mettre à jour avec SQLAlchemy?
Comment modifier avec SQLAlchemy?
Comment supprimer avec SQLAlchemy?
Comment installer Python à l'aide d'Anaconda
Comment gérer une session dans SQLAlchemy
Comment lire les données de la sous-région e-Stat
Comment lire l'ensemble de données SNLI
Traitement des insertions de table DB à l'aide de sqlalchemy
Comment formater un tableau à l'aide de Pandas Appliquer, pivoter et permuter le niveau
Comment INNER JOIN avec SQL Alchemy
Connectez-vous à MySQL à l'aide de Flask SQL Alchemy
Comment obtenir l'identifiant du parent avec sqlalchemy
Comment lire pydoc sur l'interpréteur python
Comment définir dynamiquement des variables en Python
Comment dessiner un graphique avec Matplotlib
Comment configurer SVM à l'aide d'Optuna
Comment installer un package à l'aide d'un référentiel
Comment configurer XG Boost à l'aide d'Optuna
Comment afficher la table quatre-vingt-dix-neuf en python
Comment remplir dynamiquement des zéros avec Python
Comment télécharger des vidéos YouTube à l'aide de pytube3
Comment lire des fichiers CSV avec Pandas
Comment lire les données de problème avec Paiza
Comment utiliser SQLAlchemy / Connect avec aiomysql
Comment afficher la carte à l'aide de l'API Google Map (Android)
Comment lire un fichier CSV avec Python 2/3
Générer dynamiquement un filtre sqlalchemy en fonction des conditions
Comment coder un drone en utilisant la reconnaissance d'image
Comment configurer une forêt aléatoire à l'aide d'Optuna
[Python] Comment lire des fichiers Excel avec des pandas
[Python] Comment lire les données de CIFAR-10 et CIFAR-100
Comment lire un tableau avec ConfigParser de Python
Comment obtenir des données d'article à l'aide de l'API Qiita
Comment configurer une forêt aléatoire à l'aide d'Optuna
J'ai lu "Comment créer un laboratoire de piratage"
Comment lire les données de séries chronologiques dans PyTorch
Comment rechercher des données HTML à l'aide de Beautiful Soup
Tensorufuro, Tensafuro Après tout, lequel (Comment lire Tensorflow)
Comment mettre en ligne sur un Drive partagé à l'aide de pydrive
Comment désinstaller un module installé à l'aide de setup.py
Comment lire des fichiers dans différents répertoires