Flask + SQLAlchemy [ Determine Success of Commit ]
flask, sqlalchemy
Solution
Your data should be prepared anyway. But this case is not data format case And exception is always good, you just need to catch and use them
You should consider exception as returned False, also you should log the reason for fail for later solving of problem
failed=False
try:
db_session.commit()
except Exception as e:
#log your exception in the way you want -> log to file, log as error with default logging, send by email. It's upon you
db_session.rollback()
db_session.flush() # for resetting non-commited .add()
failed=True
#some use of failed var, specific for your case if you need it
For better understanding of exceptions: Exceptions python docs As for your specific exception looks like autocommit is your issue. Or not commited some previous SQL operation: Sqlalchemy docs
Problem
I have a view in flask that I want to use to display success when an object from a POST request is successfully committed. In the controller, I have ``` us = User(data_that_is_not_valid) db_session.add(us) db_session.commit() ``` As of now, db_commit() throws an exception when the object can't be committed. Is there a more friendly way that just returns true or false to specify whether the object has been added to the database without throwing an error? EDIT: Added copy of exception ``` Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.8.0-py2.7-linux-x86_64.egg/sqlalchemy/orm/scoping.py", line 149, in do return getattr(self.registry(), name)(*args, **kwargs) File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.8.0-py2.7-linux-x86_64.egg/sqlalchemy/orm/session.py", line 719, in commit self.transaction.commit() File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.8.0-py2.7-linux-x86_64.egg/sqlalchemy/orm/session.py", line 350, in commit self._assert_active(prepared_ok=True) File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.8.0-py2.7-linux-x86_64.egg/sqlalchemy/orm/session.py", line 192, in _assert_active % self._rollback_exception sqlalchemy.exc.InvalidRequestError: This Session's transaction has been rolled back due to a previous exception during flush. To begin a new transaction with this Session, first issue Session.rollback(). Original exception was: (IntegrityError) column email is not unique u'INSERT INTO users (name, email, password) VALUES (?, ?, ?)' ('test', 'test@test.com', 'test') ```