我的Web服务器(512 RAM)具有:FLASK + SQLAlchemy(SQLite)-> uWSGI-> Nginx
问题:Sqlalchemy返回SELECT命令(query.all)的不同结果。
示例:
只要我不重新启动Flask应用,就会发生这种情况。
下面的代码:
DECLARATIVE_BASE = declarative_base() engine = create_engine('sqlite:///database.db') Session = sessionmaker(bind=engine) session = Session() class Order(DECLARATIVE_BASE): __tablename__ = 'orders' __table_args__ = ( {'mysql_engine': 'InnoDB', 'sqlite_autoincrement': True, 'mysql_charset': 'utf8'} ) id = Column(INTEGER, autoincrement=True, primary_key=True, nullable=False) # pylint: disable=invalid-name name = Column(TEXT, nullable=False) address = Column(TEXT) phone = Column(TEXT, nullable=False) email = Column(TEXT) comment = Column(TEXT) totalPrice = Column(DECIMAL(asdecimal=False)) orderItems = relationship(Orderitem) time = Column(TEXT, default=time.strftime("%H:%m %d.%m.%y")) def __repr__(self): return self.__str__() def __str__(self): return "<Order(%s)>" % self.__dict__ @app.route('/api/orders', methods=['GET']) def getAllOrders(): allOrders = session.query(Order).all() return json.dumps(allOrders, cls=new_alchemy_encoder(False, ['orderItems', 'product']), check_circular=False, ensure_ascii=False) #ensure_ascii=False -- for rigth out cyrlic;
我有Web服务器(512 RAM),具有:FLASK + SQLAlchemy(SQLite)-> uWSGI-> Nginx问题:Sqlalchemy返回SELECT命令(query.all)的不同结果。示例:在...
[每个工人您有一个SQLAlchemy会话,并且可能在uwsgi中使用2个工人。 SQLAlchemy缓存每个会话的结果,因此工作程序1的会话将返回新结果,因为您已向该工作程序添加了记录,但是工作程序2的会话未更新,仅返回了旧记录。
解决方案:不创建全局会话,而是为每个请求创建一个新会话。
这应该有帮助。 SQLAlchemy会话未正确关闭!