Bereiten Sie beispielsweise eine gespeicherte Prozedur in SQL Server vor, die einen Datensatz zurückgibt, der mehrere Datensätze einer Tabelle horizontal erweitert, den mit SQL Alchemy gespeicherten Datensatz ausführt und das Ausführungsergebnis (vle) mit fetch one () abruft. , Holen Sie sich den Spaltennamen (clm) der Daten mit den Schlüsseln (). Wenn Sie diese beiden mit einer Zip-Funktion auflisten und daraus ein Diktatwörterbuch machen, können Sie die Verarbeitung erweitern, z. B. das Erstellen einer XML-Datei mit elementTree im nachfolgenden Prozess.
make_dict.py
import sqlalchemy
ym = 201603
CONNECT_INFO = 'mssql+pyodbc://hogehoge' #hoge hoge ist jede DNS(Odbc-Verbindung)
engine = sqlalchemy.create_engine(CONNECT_INFO, encoding='utf-8')
#Sitzungsgenerierung
Session = sqlalchemy.orm.sessionmaker(bind=engine)
session = Session()
#Ausführung gespeicherter Prozeduren
query = 'EXEC dbo.sp_rtrv4XML @prd = {0}'.format(ym)
#vle = session.execute(query).fetchall() #Ausführungsergebnis abrufen:Wenn mehrere Ergebnisse zurückgegeben werden
#print( vle[0][0] )
vle = session.execute(query).fetchone() #Ausführungsergebnis abrufen:1 Fall wird zurückgesandt
clm = session.execute(query).keys() #Spaltennamen abrufen
dc = dict(zip(clm , vle)) #Erstellen Sie ein Wörterbuch
print(dc)
#Räumen Sie nach der Sitzung auf
#session.commit()
session.close()
Hinweis) Als zu verbindende Datenbank wird SQL Server angenommen. Im Fall von SQLServer wird die gespeicherte Ausführung von der EXEC-Anweisung ausgeführt.
apdx.sql
--SELECT-Anweisung, die mehrere Datensätze in einer Tabelle horizontal zu einem Datensatz erweitert
;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
/*
Ausführungsergebnis ↓
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
#Erstellen Sie ein Wörterbuch mit der ZIP-Funktion
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