Am Anfang widerstrebend, aber ehrlich? Der Datensatz wurde zeilenweise in die Tabelle eingefügt, indem der Vorgang zum Festlegen des Werts jeder Spalte in myobject und session.add (myobject) in einer for-Schleife wiederholt wurde.
sql_insert_old.py
Base = sqlalchemy.ext.declarative.declarative_base()
class Hogega_tmp(Base):
__tablename__ = 'hogega_tmps'
id = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True)
y = sqlalchemy.Column(sqlalchemy.String(10))
m = sqlalchemy.Column(sqlalchemy.String(10))
d = sqlalchemy.Column(sqlalchemy.String(10))
dim4 = sqlalchemy.Column(sqlalchemy.String(100))
pv = sqlalchemy.Column(sqlalchemy.String(50))
rsf = sqlalchemy.Column(sqlalchemy.String(10))
fld = sqlalchemy.Column(sqlalchemy.String(10))
def orm(data,fld):
#SQL Alchemy-Initialisierung
CONNECT_INFO = 'mssql+pyodbc://hogehoge'
engine = sqlalchemy.create_engine(CONNECT_INFO, encoding='utf-8')
#Erstellen Sie eine Sitzung
Session = sqlalchemy.orm.sessionmaker(bind=engine)
session = Session()
#Mit oder ohne Zufallsstichprobenfunktion
if data["containsSampledData"]:
rsf=1
else:
rsf=0
cnt=data["totalResults"]
print(ref)
#Fügen Sie Datensätze nacheinander durch Schleifenverarbeitung in die Tabelle ein
if cnt!=0:
for i,n in enumerate(data["rows"]):
print(i)
if fld.find("source")!= -1:
myobject = Hogega_tmp(y=n[0],m=n[1],d=n[2],dim4=n[3],pv=n[4]
rsf=rsf,fld=fld)
session.add(myobject) #Zeile einfügen
if fld.find("source")!= -1 and i>=24: #Begrenzte Anzahl von Einfügungen
break
session.commit() #verpflichten
session.close() #Sitzung schließen
Hinweis) Oben wird beispielsweise angenommen, dass das Ergebnis der Ausführung der API von Google Analytics in SQL Server gespeichert ist.
Es ist nicht cool, das Einfügen von Zeilen nacheinander zu wiederholen, oder sogar mit SQL können mehrere Daten zusammen mit einer Insert-Anweisung eingefügt werden. Das folgende Skript wollte daher prüfen, ob dies mit Sqlalchemy erreicht werden kann.
sql_insert_new.py
def orm2(data,fld):
#SQL Alchemy-Initialisierung
CONNECT_INFO = 'mssql+pyodbc://hogehoge'
engine = sqlalchemy.create_engine(CONNECT_INFO, encoding='utf-8')
#Erstellen Sie eine Sitzung
Session = sqlalchemy.orm.sessionmaker(bind=engine)
session = Session()
#Mit oder ohne Zufallsstichprobenfunktion
if data["containsSampledData"]:
rsf=1
else:
rsf=0
clm =["y","m","d","dim4","pv","rsf","fld"]
ex=[rsf,fld]
cnt=data["totalResults"]
if cnt!=0:
rws = data["rows"]
if fld.find("source")!= -1:
rws = rws[:25] #Begrenzte Anzahl von Einfügungen
#Zeile einfügen
lst = [dict(zip(clm,r+ex)) for r in rws ] #Generierung von Wertklauseln
ins_statement = Hogega_tmp.__table__.insert().values(lst)
session.execute(ins_statement)
session.commit()
session.close()
Wenn Sie die folgende "Liste mit mehreren Wörterbüchern" in den Argumentteil (lst) der Insert-Anweisung schreiben, können Sie mehrere Daten stapeln, ohne den Einfügevorgang einzeln in der for-Schleife zu wiederholen. Es scheint, dass Sie eine Tabellenzeile mit einfügen können. (Das heißt, es entspricht der Values-Klausel von "Insert In ... Values ..." in SQL)
sql_insert_apdx1.py
[{y:2016,m:5,d:1,dim4:yahoo,pv:100},
{y:2016,m:5,d:1,dim4:google,pv:200},
...
{y:2016,m:5,d:1,dim4:smartnews,pv:300}]
In der obigen sql_insert_new.py
wird lst in der Listeneinschlussnotation das folgende Bild, wenn die Bedeutung der Verarbeitung aufgeschlüsselt ist.
sql_insert_apdx2.py
lst = list()
for r in rws:
vle = r+ex
y = dict(zip(clm,vle)
lst.append(y)
(Vle entspricht dem in der Tabelle gespeicherten Wert, clm entspricht dem Tabellenspaltennamen, und diese beiden Sequenzen werden von ZIP () aufgelistet und in den Wörterbuchtyp y umgewandelt, und der Vorgang des sequentiellen Hinzufügens zur Liste lst wird in einer for-Schleife wiederholt Bedeutung)
Recommended Posts