hi
I have a generic static save method which saves instances of all objects as
follows
engine =
create_engine("mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname>")
class DBHandler(object):
'''Handles generic DB related operations'''
session = Session(bind=engine)
@staticmethod
@db_error_handler
def save(rows):
if rows is not None:
try:
DBHandler.session.add_all(rows)
DBHandler.session.commit()
except IntegrityError as ie:
logger.debug("Error saving data, integrity constraint
violation:\
%s", ie)
raise DBIntegrityError("Error saving data, integrity \
constraint violation: %s" % ie)
@staticmethod
@db_error_handler
def fetch_host(hostname):
host = DBHandler.session.query(Host).filter_by(host_name=\
hostname).one()
if host is None:
host = Host(host_name=data['host'], host_colo='unknown')
return host
@staticmethod
@db_error_handler
def insert_minute_data(minute_data):
minute_data_chunk = []
for data in minute_data:
host = DBHandler.fetch_emitter_host(data['host'])
track = DBHandler.fetch_track(data['track'])
timestamp = DBHandler.get_UTC_date(data['time'])
minute_data_chunk.append(PerMinuteTraffic(minute_track=track,\
minute_host=host, minute=timestamp,\
events_emitted=data['in'], events_received=data['out']))
DBHandler.save(minute_data_chunk)
*Call from main:*
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
future_to_track = {executor.submit(compute, client,
start_epoch_min,\
end_epoch_min, track): track for track in tracks}
for future in concurrent.futures.as_completed(future_to_track):
track = future_to_track[future]
# try:
data = future.result() *# Tried printing data and looks good
most of the time*
logger.debug("Fetched the per host minute level data for the \
track:%s" % track)
DBHandler.insert_minute_data(data)
1. Is it good way to create static methods like this?
2. is the approach of creating new if not present ok here ?
3. After printing data for couple of tracks in "insert_minute_data" it
throws following error consistently
Invalid Operation: (OperationalError) (2006, 'MySQL server has gone away')
'SELECT emitter_host.host_id AS emitter_host_host_id,
emitter_host.host_name AS emitter_host_host_name, emitter_ho
st.host_colo AS emitter_host_host_colo, emitter_host.property AS
emitter_host_property \nFROM emitter_host \nWHERE emitter_host.host_name =
%s' (u'somehostname',)
SQLAlchemy error: Can't reconnect until invalid transaction is rolled back
(original cause: InvalidRequestError: Can't reconnect until invalid
transaction is rolled back) 'SELECT emitter_ho
st.host_id AS emitter_host_host_id, emitter_host.host_name AS
emitter_host_host_name, emitter_host.host_colo AS emitter_host_host_colo,
emitter_host.property AS emitter_host_property \nFROM
emitter_host \nWHERE emitter_host.host_name = %s' [immutabledict({})]
Is it required to handle exception after any sqlalchemy operation and
rollback() in except ?
--
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.