Par exemple, préparez une procédure stockée dans SQL Server qui renvoie un enregistrement qui développe plusieurs enregistrements de n'importe quelle table horizontalement, exécutez le stocké avec SQLAlchemy et récupérez le résultat de l'exécution (vle) avec fetch one (). , Obtenez le nom de la colonne (clm) des données avec les touches (). Si vous répertoriez ces deux éléments avec une fonction zip et en faites un dictionnaire dict, vous pouvez développer le traitement tel que la création d'un fichier XML à l'aide de elementTree dans le processus suivant.
make_dict.py
import sqlalchemy
ym = 201603
CONNECT_INFO = 'mssql+pyodbc://hogehoge' #hoge hoge est n'importe quel DNS(connexion odbc)
engine = sqlalchemy.create_engine(CONNECT_INFO, encoding='utf-8')
#Génération de session
Session = sqlalchemy.orm.sessionmaker(bind=engine)
session = Session()
#Exécution de procédure stockée
query = 'EXEC dbo.sp_rtrv4XML @prd = {0}'.format(ym)
#vle = session.execute(query).fetchall() #Obtenir le résultat de l'exécution:Lorsque plusieurs résultats sont renvoyés
#print( vle[0][0] )
vle = session.execute(query).fetchone() #Obtenir le résultat de l'exécution:1 caisse sera retournée
clm = session.execute(query).keys() #Obtenir le nom de la colonne
dc = dict(zip(clm , vle)) #Créer un dictionnaire
print(dc)
#Nettoyer après la session
#session.commit()
session.close()
Remarque) La base de données à connecter est supposée être SQL Server. Dans le cas de SQLServer, l'exécution stockée est effectuée par l'instruction EXEC.
apdx.sql
--Instruction SELECT qui développe plusieurs enregistrements dans une table horizontalement en un seul enregistrement
;WITH apdx
AS(
SELECT 1 AS n,'vle1-1' AS fld1 , 'vle1-2' AS fld2 UNION ALL
SELECT 2 AS n,'vle2-1' AS fld1 , 'vle2-2' AS fld2 UNION ALL
SELECT 3 AS n,'vle3-1' AS fld1 , 'vle3-2' AS fld2 UNION ALL
SELECT 4 AS n,'vle4-1' AS fld1 , 'vle4-2' AS fld2
)
--SELECT *FROM hoge
SELECT
MAX(CASE WHEN n= 1 THEN fld1 END )AS fl11
, MAX(CASE WHEN n= 1 THEN fld2 END )AS fl12
, MAX(CASE WHEN n= 2 THEN fld1 END )AS fl21
, MAX(CASE WHEN n= 2 THEN fld2 END )AS fl22
, MAX(CASE WHEN n= 3 THEN fld1 END )AS fl31
, MAX(CASE WHEN n= 3 THEN fld2 END )AS fl32
, MAX(CASE WHEN n= 4 THEN fld1 END )AS fl41
, MAX(CASE WHEN n= 4 THEN fld2 END )AS fl42
FROM apdx
/*
Résultat de l'exécution ↓
fl11 fl12 fl21 fl22 fl31 fl32 fl41 fl42
vle1-1 vle1-2 vle2-1 vle2-2 vle3-1 vle3-2 vle4-1 vle4-2
*/
apdx.py
#Créer un dictionnaire à l'aide de la fonction ZIP
clm = ['fld1','fld2','fld3','fld4']
vle = ['vle1','vle2','vle3','vle4']
y = zip(clm,vle)
print(dict(y))
# {'fld3':'vle3','fld2':'vle2','fld1':'vle1','fld4':'vle4',}
Recommended Posts