import datetime from sqlalchemy import text from sqlalchemy import DateTime class SQLGenerate(): def __init__(self): pass def merge_series(self): seriessql = text(''' INSERT INTO dbo.seriesdata (serieslink, url, thetvdb, tvrage, imdb, genres, seriesid, medium,original, language, name, webchannelid, networkid, premiered, rating, runtime, days, time, status, summary, type, weight) SELECT serieslink, url, thetvdb, tvrage, imdb, genres, seriesid, medium,original, language, name, webchannelid, networkid, premiered, rating, runtime, days, time, status, summary, type, weight from updates.newseriesdata ON CONFLICT(seriesid) DO UPDATE SET serieslink = excluded.serieslink, url = excluded.url, thetvdb = excluded.thetvdb, tvrage = excluded.tvrage, genres = excluded.genres, seriesid = excluded.seriesid, medium = excluded.medium, original = excluded.original, language = excluded.language, name = excluded.name, webchannelid = excluded.webchannelid, networkid = excluded.networkid, premiered = excluded.premiered, rating = excluded.rating, runtime = excluded.runtime, days = excluded.days, time = excluded.time, status = excluded.status, summary = excluded.summary, type = excluded.type, weight = excluded.weight; ''') return(seriessql) def merge_episodes(self): episodesql = text(''' INSERT INTO dbo.epdata (episodeid, seriesid, season, episodenumber, episodename, airdate, airtime, episodesummary, airstamp, runtime, eplink, mediumimage, originalimage, "url") SELECT episodeid, seriesid, season, episodenumber, episodename, airdate, airtime, episodesummary, airstamp, runtime, eplink, mediumimage, originalimage, "url" FROM updates.newepdata ON CONFLICT (seriesid, episodeid) do UPDATE SET episodeid = excluded.episodeid, seriesid = excluded.seriesid, season = excluded.season, episodenumber = excluded.episodenumber, episodename = excluded.episodename, airdate = excluded.airdate, airtime = excluded.airtime, episodesummary = excluded.episodesummary, airstamp = excluded.airstamp, runtime = excluded.runtime, eplink = excluded.eplink, mediumimage = excluded.mediumimage, originalimage = excluded.originalimage, "url" = excluded."url"; ''') return(episodesql) def merge_updates(self): updatesql = text(''' INSERT INTO updates.tvupdatedata(seriesid, timestamp) SELECT seriesid, timestamp from updates.tvupdates ON CONFLICT(seriesid) DO UPDATE SET seriesid = excluded.seriesid, timestamp = excluded.timestamp; ''') return(updatesql) def merge_cast(self): datetimestamp = DateTime(datetime.datetime.utcnow) castsql = text(''' INSERT INTO dbo.castdata (seriesid,characterid,actorid,charactername,mediumimage,originalimage,apilink,tvmazeilink) SELECT seriesid,characterid,actorid,charactername,mediumimage,originalimage,apilink,tvmazeilink FROM updates.newcastdata ON CONFLICT (seriesid, characterid, actorid) DO UPDATE SET seriesid = excluded.seriesid, characterid = excluded.characterid, actorid = excluded.actorid, charactername = excluded.charactername, mediumimage = excluded.mediumimage, originalimage = excluded.originalimage, apilink = excluded.apilink, tvmazeilink = excluded.tvmazeilink ''') return(castsql) def merge_actors(self): actorsql = text(''' INSERT INTO dbo.actors (actorid,actorname,countryname,countrytimezone,birthday,deathday,gender,mediumimage,originalimage,apilink,"url",countrycode) SELECT actorid,actorname,countryname,countrytimezone,birthday,deathday,gender,mediumimage,originalimage,apilink,"url",countrycode FROM updates.newactordata ON CONFLICT (actorid) DO UPDATE SET actorid = excluded.actorid, actorname = excluded.actorname, countryname = excluded.countryname, countrytimezone = excluded.countrytimezone, birthday = excluded.birthday, deathday = excluded.deathday, gender = excluded.gender, mediumimage = excluded.mediumimage, originalimage = excluded.originalimage, apilink = excluded.apilink, "url" = excluded."url", countrycode = excluded.countrycode; ''') return(actorsql) def merge_crew(self): crewsql = text(''' INSERT INTO dbo.crewdata (seriesid, crewid, countryid, type, name, medium, original, apilink, gender, birthday, deathday) SELECT seriesid, crewid, countryid, type, name, medium, original, apilink, gender, birthday, deathday FROM updates.newcrewdata ON CONFLICT (seriesid, crewid, type) DO UPDATE SET seriesid = excluded.seriesid, crewid = excluded.crewid, countryid = excluded.countryid, type = excluded.type, name = excluded.name, medium = excluded.medium, original = excluded.original, apilink = excluded.apilink, gender = excluded.gender, birthday = excluded.birthday, deathday = excluded.deathday; ''') return(crewsql) def __del__(self): pass class Merger(): def __init__(self): pass def __del__(self): pass class Charactermerge(): def __init__(self): pass def merge(self, engine): castsql = text('''MERGE dbo.castdata as N USING updates.newcastdata as O ON N.seriesid = O.seriesid and N.characterid = O.characterid and N.actorid = O.actorid WHEN MATCHED THEN UPDATE SET N.seriesid = O.seriesid, N.characterid = O.characterid,N.actorid = O.actorid,N.charactername = O.charactername,N.mediumimage = O.mediumimage,N.originalimage = O.originalimage,N.apilink = O.apilink,N.tvmazelink = O.tvmazelink, N.updated_on = GETDATE() WHEN NOT MATCHED THEN INSERT (seriesid,characterid,actorid,charactername,mediumimage,originalimage,apilink,tvmazelink, created_on) VALUES (O.seriesid,O.characterid,O.actorid,O.charactername,O.mediumimage,O.originalimage,O.apilink,O.tvmazelink, GETDATE()); SELECT * FROM updates.newcastdata; ''') with engine.connect() as con: rs = con.execute(castsql) #engine.commit() actorsql = text('''MERGE dbo.actors as N USING updates.newactordata as O ON N.actorid = O.actorid WHEN MATCHED THEN UPDATE SET N.actorid = O.actorid, N.actorname = O.actorname, N.countryname = O.countryname, N.countrytimezone = O.countrytimezone, N.birthday = O.birthday, N.deathday = O.deathday, N.gender = O.gender, N.mediumimage = O.mediumimage, N.originalimage = O.originalimage, N.apilink = O.apilink, N.url = O.url, N.countrycode = O.countrycode, N.updated_on = GETDATE() WHEN NOT MATCHED THEN INSERT (actorid,actorname,countryname,countrytimezone,birthday,deathday,gender,mediumimage,originalimage,apilink,url,countrycode,created_on) VALUES (O.actorid,O.actorname,O.countryname,O.countrytimezone,O.birthday,O.deathday,O.gender,O.mediumimage,O.originalimage,O.apilink,O.url,O.countrycode, GETDATE()); SELECT * FROM updates.newactordata; ''') with engine.connect() as con: rs = con.execute(actorsql) #engine.commit() def __del__(self): pass class Updatemerge(): def __init__(self): pass def merge(self, engine): updatesql = text('''INSERT INTO updates.tvupdatedata (seriesid, timestamp) select seriesid, timestamp from updates.tvupdates ON CONFLICT (seriesid) DO UPDATE SET seriesid = EXCLUDED.seriesid, timestamp = EXCLUDED.timestamp;''') with engine.connect() as con: rs = con.execute(updatesql) #engine.commit() def __del__(self): pass class Jsonmerge(): def __init__(self): pass def merge(self, engine): seriessql = text('''INSERT INTO "[updates]".tvmaze_seriesjson (seriesid, jdata, created_on) select seriesid, jdata, date_trunc('minute', current_timestamp) FROM "[updates]".seriesjsonnewvals ON CONFLICT (seriesid) DO update SET seriesid = EXCLUDED.seriesid, jdata = EXCLUDED.jdata, updated_on = date_trunc('minute', current_timestamp); ''') with engine.connect() as con: rs = con.execute(seriessql) #engine.commit() episodesql = text('''INSERT INTO "[updates]".tvmaze_episodejson (seriesid, jdata, created_on) select seriesid, jdata, date_trunc('minute', current_timestamp) FROM "[updates]".episodejsonnewvals ON CONFLICT (seriesid) DO update SET seriesid = EXCLUDED.seriesid, jdata = EXCLUDED.jdata, updated_on = date_trunc('minute', current_timestamp); ''') with engine.connect() as con: rs = con.execute(episodesql) #engine.commit() charactersql = text('''INSERT INTO "[updates]".tvmaze_characterjson (seriesid, jdata, created_on) select seriesid, jdata, date_trunc('minute', current_timestamp) FROM "[updates]".characterjsonnewvals ON CONFLICT (seriesid) DO update SET seriesid = EXCLUDED.seriesid, jdata = EXCLUDED.jdata, updated_on = date_trunc('minute', current_timestamp); ''') with engine.connect() as con: rs = con.execute(charactersql) #engine.commit() def __del__(self): pass class Episodemerge(): def __init__(self): pass def merge(self, engine): episodesql = text('''INSERT INTO dbo.epdata (episodeid,seriesid,season,episodenumber,episodename,airdate,airtime,episodesummary,airstamp,runtime,eplink,mediumimage,originalimage,url, created_on) select episodeid,seriesid,season,episodenumber,episodename,airdate,airtime,episodesummary,airstamp,runtime,eplink,mediumimage,originalimage,url, date_trunc('minute', current_timestamp) FROM "[updates]".newepdata ON CONFLICT (episodeid) DO UPDATE SET episodeid = EXCLUDED.episodeid, seriesid = EXCLUDED.seriesid, season = EXCLUDED.season, episodenumber = EXCLUDED.episodenumber, episodename = EXCLUDED.episodename, airdate = EXCLUDED.airdate, airtime = EXCLUDED.airtime, episodesummary = EXCLUDED.episodesummary, airstamp = EXCLUDED.airstamp, runtime = EXCLUDED.runtime, eplink = EXCLUDED.eplink, mediumimage = EXCLUDED.mediumimage, originalimage = EXCLUDED.originalimage, url = EXCLUDED.url, updated_on = date_trunc('minute', current_timestamp);''') with engine.connect() as con: rs = con.execute(episodesql) #engine.commit() def __del__(self): pass