Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import datetime
- import os
- from flask import Flask
- from sqlalchemy import Column, DateTime, create_engine, String, Integer
- from sqlalchemy.ext.declarative import declarative_base
- from sqlalchemy.orm import scoped_session, sessionmaker
- db_engine = create_engine(**config)
- db_sessionmaker = sessionmaker(
- bind=db_engine, autocommit=False, autoflush=False
- )
- db_session = scoped_session(db_sessionmaker)
- BaseModel = declarative_base()
- class Foo(BaseModel):
- __tablename__ = 'foo'
- id = Column(Integer, primary_key=True)
- last_login = Column(DateTime)
- name = Column(String)
- # # use this once
- # foo = Foo(id=1, name='bar', last_login=datetime.datetime.utcnow())
- # db_session.add(foo)
- # db_session.commit()
- app = Flask(__name__)
- @app.route('/update-string', methods=['PUT'])
- def update_string():
- instance = db_session.query(Foo).filter_by(id=1).first()
- instance.name = datetime.datetime.utcnow()
- db_session.commit()
- return 'ok'
- @app.route('/update-datetime', methods=['PUT'])
- def update_datetime():
- instance = db_session.query(Foo).filter_by(id=1).first()
- instance.last_login = datetime.datetime.utcnow()
- db_session.commit()
- return 'ok'
- if __name__ == '__main__':
- app.run('0.0.0.0', 8080, debug=True)
- # 2023-09-01 15:25:06,559 INFO sqlalchemy.engine.Engine BEGIN (implicit)
- # 2023-09-01 15:25:06,559 INFO sqlalchemy.engine.Engine SELECT foo.id AS foo_id, foo.last_login AS foo_last_login, foo.name AS foo_name
- # FROM foo
- # WHERE foo.id = %s
- # LIMIT %s
- # 2023-09-01 15:25:06,560 INFO sqlalchemy.engine.Engine [cached since 24.16s ago] (1, 1)
- # 2023-09-01 15:25:06,561 INFO sqlalchemy.engine.Engine UPDATE foo SET last_login=%s WHERE foo.id = %s
- # 2023-09-01 15:25:06,561 INFO sqlalchemy.engine.Engine [cached since 5.888s ago] (datetime.datetime(2023, 9, 1, 15, 25, 6, 561039), 1)
- # 2023-09-01 15:25:06,562 INFO sqlalchemy.engine.Engine COMMIT
- # 192.168.0.1 - - [01/Sep/2023 15:25:06] "PUT /update-datetime HTTP/1.1" 200 -
- # 2023-09-01 15:25:06,731 INFO sqlalchemy.engine.Engine BEGIN (implicit)
- # 2023-09-01 15:25:06,732 INFO sqlalchemy.engine.Engine SELECT foo.id AS foo_id, foo.last_login AS foo_last_login, foo.name AS foo_name
- # FROM foo
- # WHERE foo.id = %s
- # LIMIT %s
- # 2023-09-01 15:25:06,732 INFO sqlalchemy.engine.Engine [cached since 24.33s ago] (1, 1)
- # 2023-09-01 15:25:06,733 INFO sqlalchemy.engine.Engine UPDATE foo SET last_login=%s WHERE foo.id = %s
- # 2023-09-01 15:25:06,733 INFO sqlalchemy.engine.Engine [cached since 6.06s ago] (datetime.datetime(2023, 9, 1, 15, 25, 6, 733459), 1)
- # 2023-09-01 15:25:06,734 INFO sqlalchemy.engine.Engine ROLLBACK
- # 192.168.0.1 - - [01/Sep/2023 15:25:06] "PUT /update-datetime HTTP/1.1" 500 -
- # Traceback (most recent call last):
- # File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 2548, in __call__
- # return self.wsgi_app(environ, start_response)
- # File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 2528, in wsgi_app
- # response = self.handle_exception(e)
- # File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
- # response = self.full_dispatch_request()
- # File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
- # rv = self.handle_user_exception(e)
- # File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
- # rv = self.dispatch_request()
- # File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
- # return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
- # File "/usr/src/app/sqa.py", line 69, in update_datetime
- # db_session.commit()
- # File "<string>", line 2, in commit
- # File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 1428, in commit
- # self._transaction.commit(_to_root=self.future)
- # File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 829, in commit
- # self._prepare_impl()
- # File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 808, in _prepare_impl
- # self.session.flush()
- # File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 3339, in flush
- # self._flush(objects)
- # File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 3479, in _flush
- # transaction.rollback(_capture_exception=True)
- # File "/usr/local/lib/python3.8/site-packages/sqlalchemy/util/langhelpers.py", line 70, in __exit__
- # compat.raise_(
- # File "/usr/local/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 207, in raise_
- # raise exception
- # File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 3439, in _flush
- # flush_context.execute()
- # File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/unitofwork.py", line 456, in execute
- # rec.execute(self)
- # File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/unitofwork.py", line 630, in execute
- # util.preloaded.orm_persistence.save_obj(
- # File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/persistence.py", line 234, in save_obj
- # _emit_update_statements(
- # File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/persistence.py", line 1032, in _emit_update_statements
- # raise orm_exc.StaleDataError(
- # sqlalchemy.orm.exc.StaleDataError: UPDATE statement on table 'foo' expected to update 1 row(s); 0 were matched.
Advertisement
Add Comment
Please, Sign In to add comment