# -*- coding: utf-8 -*- from datetime import datetime import MySQLdb.cursors class Vessel(): fields = ('vid', 'vtype', 'vesselname', 'model', 'loa', 'lwl', 'beam', 'draught', 'draught_min', 'displacement', 'ballast', 'beltpos_aft', 'beltpos_bow', 'shapefile', 'remarks') def __init__(self, dbconn, vessel_id=None): self.conn = dbconn self.dcur = dbconn.cursor(MySQLdb.cursors.DictCursor) if vessel_id: self.vid = long(vessel_id) self.load() else: self.vid = None self.vtype = None self.model = None self.loa = None self.lwl = None self.beam = None self.draught = None self.draught_min = None self.displacement = None self.ballast = None self.beltpos_aft = None self.beltpos_bow = None self.shapefile = None self.remarks = None self.data = {} # for old/new checks def load(self): sql = ( "SELECT {}".format(', '.join(self.fields)) "FROM vessel " "WHERE vessel_id=%s" ) self.dcur.execute(sql, (self.vid,)) self.data = self.dcur.fetchone() # TODO self.parent_id = self.data['parent_id'] def save(self): last_row_id = None self.last_update = datetime.now() if self.vid: # record already available sqlfield = [] values = [] for field in self.fields: newdata = getattr(self, field) if self.data[field] != newdata: sqlfield.append("{}=%s".format(field)) values.append(newdata) self.data[field] = newdata if values: # only save ich there are changes sql = ( "UPDATE vessel SET " + ",".join(sqlfield) + " WHERE vidid=%s" ) values.append(self.vid) self.dcur.execute(sql, values) # TODO check sql result last_row_id = self.vid else: # new record sql = ( "INSERT INTO risk (" + ",".join(self.fields) + ") VALUES (" + ",".join(["%s"] * len(self.fields)) + ")" ) values = [] for field in self.fields: newdata = getattr(self, field) values.append(newdata) self.data[field] = newdata self.dcur.execute(sql, values) last_row_id = self.dcur.lastrowid self.vid = last_row_id def delete(self, vessel_id): sql = "DELETE FROM vessel WHERE vid=%s" self.cur.execute(sql, (self.vid,)) def __str__(self): out = "Vessel({})".format(self.vid) return out