Guest User

sqlalchemy-mysql-debug

a guest
Sep 1st, 2023
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.43 KB | None | 0 0
  1. import datetime
  2. import os
  3. from flask import Flask
  4. from sqlalchemy import Column, DateTime, create_engine, String, Integer
  5. from sqlalchemy.ext.declarative import declarative_base
  6. from sqlalchemy.orm import scoped_session, sessionmaker
  7.  
  8. db_engine = create_engine(**config)
  9. db_sessionmaker = sessionmaker(
  10.     bind=db_engine, autocommit=False, autoflush=False
  11. )
  12. db_session = scoped_session(db_sessionmaker)
  13. BaseModel = declarative_base()
  14.  
  15. class Foo(BaseModel):
  16.     __tablename__ = 'foo'
  17.  
  18.     id = Column(Integer, primary_key=True)
  19.     last_login = Column(DateTime)
  20.     name = Column(String)
  21.  
  22. # # use this once
  23. # foo = Foo(id=1, name='bar', last_login=datetime.datetime.utcnow())
  24. # db_session.add(foo)
  25. # db_session.commit()
  26.  
  27.  
  28. app = Flask(__name__)
  29.  
  30. @app.route('/update-string', methods=['PUT'])
  31. def update_string():
  32.     instance = db_session.query(Foo).filter_by(id=1).first()
  33.     instance.name = datetime.datetime.utcnow()
  34.     db_session.commit()
  35.     return 'ok'
  36.  
  37. @app.route('/update-datetime', methods=['PUT'])
  38. def update_datetime():
  39.     instance = db_session.query(Foo).filter_by(id=1).first()
  40.     instance.last_login = datetime.datetime.utcnow()
  41.     db_session.commit()
  42.     return 'ok'
  43.  
  44. if __name__ == '__main__':
  45.     app.run('0.0.0.0', 8080, debug=True)
  46.    
  47. # 2023-09-01 15:25:06,559 INFO sqlalchemy.engine.Engine BEGIN (implicit)
  48. # 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
  49. # FROM foo
  50. # WHERE foo.id = %s
  51. #  LIMIT %s
  52. # 2023-09-01 15:25:06,560 INFO sqlalchemy.engine.Engine [cached since 24.16s ago] (1, 1)
  53. # 2023-09-01 15:25:06,561 INFO sqlalchemy.engine.Engine UPDATE foo SET last_login=%s WHERE foo.id = %s
  54. # 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)
  55. # 2023-09-01 15:25:06,562 INFO sqlalchemy.engine.Engine COMMIT
  56. # 192.168.0.1 - - [01/Sep/2023 15:25:06] "PUT /update-datetime HTTP/1.1" 200 -
  57.  
  58.  
  59. # 2023-09-01 15:25:06,731 INFO sqlalchemy.engine.Engine BEGIN (implicit)
  60. # 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
  61. # FROM foo
  62. # WHERE foo.id = %s
  63. #  LIMIT %s
  64. # 2023-09-01 15:25:06,732 INFO sqlalchemy.engine.Engine [cached since 24.33s ago] (1, 1)
  65. # 2023-09-01 15:25:06,733 INFO sqlalchemy.engine.Engine UPDATE foo SET last_login=%s WHERE foo.id = %s
  66. # 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)
  67. # 2023-09-01 15:25:06,734 INFO sqlalchemy.engine.Engine ROLLBACK
  68. # 192.168.0.1 - - [01/Sep/2023 15:25:06] "PUT /update-datetime HTTP/1.1" 500 -
  69.  
  70.  
  71. # Traceback (most recent call last):
  72. #   File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 2548, in __call__
  73. #     return self.wsgi_app(environ, start_response)
  74. #   File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 2528, in wsgi_app
  75. #     response = self.handle_exception(e)
  76. #   File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
  77. #     response = self.full_dispatch_request()
  78. #   File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
  79. #     rv = self.handle_user_exception(e)
  80. #   File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
  81. #     rv = self.dispatch_request()
  82. #   File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
  83. #     return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  84. #   File "/usr/src/app/sqa.py", line 69, in update_datetime
  85. #     db_session.commit()
  86. #   File "<string>", line 2, in commit
  87. #   File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 1428, in commit
  88. #     self._transaction.commit(_to_root=self.future)
  89. #   File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 829, in commit
  90. #     self._prepare_impl()
  91. #   File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 808, in _prepare_impl
  92. #     self.session.flush()
  93. #   File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 3339, in flush
  94. #     self._flush(objects)
  95. #   File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 3479, in _flush
  96. #     transaction.rollback(_capture_exception=True)
  97. #   File "/usr/local/lib/python3.8/site-packages/sqlalchemy/util/langhelpers.py", line 70, in __exit__
  98. #     compat.raise_(
  99. #   File "/usr/local/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 207, in raise_
  100. #     raise exception
  101. #   File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 3439, in _flush
  102. #     flush_context.execute()
  103. #   File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/unitofwork.py", line 456, in execute
  104. #     rec.execute(self)
  105. #   File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/unitofwork.py", line 630, in execute
  106. #     util.preloaded.orm_persistence.save_obj(
  107. #   File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/persistence.py", line 234, in save_obj
  108. #     _emit_update_statements(
  109. #   File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/persistence.py", line 1032, in _emit_update_statements
  110. #     raise orm_exc.StaleDataError(
  111. # 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