小编mel*_*r55的帖子

sqlalchemy MySQL连接未在flask api上关闭

我有用烧瓶写的api。它使用sqlalchemy来处理mysql数据库。我不使用flask-sqlalchemy,因为我不喜欢该模块强制您进入某种模式来声明模型的方式。

我有一个数据库连接没有关闭的问题。表示连接的对象超出范围,因此我假设它正在被垃圾收集。我还明确地在会话上调用close()。尽管有这些事实,但在api调用返回响应后很长时间,连接仍保持打开状态。

sqlsession.py:这是我用于会话的包装器。

class SqlSession:
    def __init__(self, conn=Constants.Sql):
        self.db = SqlSession.createEngine(conn)

        Session = sessionmaker(bind=self.db)
        self.session = Session()
    @staticmethod
    def createEngine(conn):
        return create_engine(conn.URI.format(user=conn.USER, password=conn.PASS, host=conn.HOST, port=conn.PORT, database=conn.DATABASE, poolclass=NullPool))

    def close(self):
        self.session.close()
Run Code Online (Sandbox Code Playgroud)

flaskroutes.py:这是实例化flask应用程序并使用包装对象的示例。请注意,它会在api调用范围内的开始处实例化它,然后在结束时关闭会话,并且大概是在返回响应之后进行垃圾回收。

def commands(self, deviceId):
    sqlSession = SqlSession(self.sessionType) <---

    commandsQueued = getCommands()
    jsonCommands = []
    for command in commandsQueued:
     jsonCommand = command.returnJsonObject()
     jsonCommands.append(jsonCommand)
     sqlSession.session.delete(command)
    sqlSession.session.commit()
    resp = jsonify({'commands': jsonCommands})
    sqlSession.close() <---  
    resp.status_code = 200
    return resp
Run Code Online (Sandbox Code Playgroud)

我希望在做出http响应后即可清除连接,但是连接最终会以“ SLEEP”状态结束(在mysql命令行界面“ show processlist”中查看时)。

python mysql database-connection sqlalchemy flask

3
推荐指数
1
解决办法
4978
查看次数

Sqlalchemy使用orm选择所有连接不存在的mysql

我们有两个表:用户和权限

我们想要选择所有没有“访客”权限的用户。现在,用户可以拥有多个权限(而不仅仅是 1 个),因此简单地查询 !"guest" 是行不通的。现在我们的查询如下所示:

query = session.query(Users).join(Permission, and_(
        Permission.userId == theUser.uid, Permission.deviceId== theDevice.uid))
query.join(Permission).filter(~exists().where(and_(Permission.level==SqlConstants.PermissionLevels.GUEST, Users.uid == Permission.userId)))
Run Code Online (Sandbox Code Playgroud)

我不确定第一行中的连接是否与我们遇到的问题相关,但我们正在使用它,所以我将其包含在这里。(如果不相关的话我会编辑掉。)

上面返回以下异常:

returned no FROM clauses due to auto-correlation; specify correlate(<tables>) to control correlation manually.
Run Code Online (Sandbox Code Playgroud)

我从下面的SO帖子中收集了这个模式: Using NOT EXISTS Clause in sqlalchemy ORM query

以及来自 sqlalchemy 文档(关于不存在的内容很浅): http://docs.sqlalchemy.org/en/rel_1_0/orm/query.html

我不清楚我做错了什么或是否有更好的方法。

python mysql sqlalchemy not-exists

3
推荐指数
1
解决办法
5431
查看次数

Firebase 模拟器无法启动并出现无意义的错误

我们使用模拟器已经有一段时间了。突然,他们停止在两个开发人员(但不是所有开发人员)的机器上工作。他们尝试调用firebase emulators:start,然后收到以下错误消息:Error: An unexpected error has occurred.

\n

我们真的不知道为什么会发生这种情况。我们甚至尝试重做 firebase init 和 emulators init。到目前为止,我们所做的一切尝试都没有帮助。以下是控制台输出以了解更多详细信息:

\n
\xe2\x9e\x9c  firebase git:(dev-vab) \xe2\x9c\x97 firebase emulators:start\ni  emulators: Starting emulators: functions, firestore, database, hosting, pubsub\n\xe2\x9a\xa0  functions: The following emulators are not running, calls to these services from the Functions emulator will affect production: auth\n\xe2\x9a\xa0  Your requested "node" version "10" doesn't match your global version "14"\ni  firestore: Firestore Emulator logging to firestore-debug.log\ni  database: Database Emulator logging to database-debug.log\ni  hosting: Serving hosting files from: public\n\xe2\x9c\x94 …
Run Code Online (Sandbox Code Playgroud)

firebase firebase-cli

3
推荐指数
1
解决办法
4980
查看次数

在aws管理控制台中哪里可以修改elastic beanstalk健康检查url?

我似乎无法在用户界面中找到修改运行状况检查 url 的位置。我什至尝试直接查看 EC2 用户界面中的负载均衡器,但编辑 HealthCheck 按钮显示为灰色。aws 文档显示了健康检查的用户界面,但他们没有描述在哪里可以找到它!

有谁知道这个用户界面的路径?

amazon-web-services amazon-elastic-beanstalk

2
推荐指数
1
解决办法
1188
查看次数

封装烧瓶API以进行测试

我过去曾经构建过Flask API,但是我从来没有像我这样被允许从事测试驱动开发的项目参与其中。现在我。

我读过的每本方法手册都以一种绝对非面向对象的方式定义了flask-api。这使得编写单元测试非常困难,因为不能将可选或特定于测试的参数传递到实例化的api中。

例如,此博客介绍了一种为flask-api创建单元测试的方法:http : //mkelsey.com/2013/05/15/test-driven-development-of-a-flask-api/

博客在测试模式下会设置环境变量,脚本会监视该变量,并在找到该变量时更改其行为。这对我来说似乎是不可取的。让源代码渗入OS环境的想法很长,这是一个坏主意。我是封装功能的忠实拥护者,以最大程度地提高可移植性并在模块的开始和结束位置之间进行清晰的区分。

为了满足我的编码理念,可能有人建议我将Flask API包装在一个类中。但是,我不清楚人们将如何做这样的事情。例如,Flask使用装饰器来定义路线:

@app.route()
Run Code Online (Sandbox Code Playgroud)

这怎么适合一个班级?

我将非常感谢任何以面向对象的方式开发了Flask API的人的指导。

python api unit-testing encapsulation flask

1
推荐指数
1
解决办法
1165
查看次数

airflow http回调传感器

我们的气流实现发出http请求以获取服务来执行任务。我们希望这些服务在完成任务时让气流知道,因此我们将向其发送回调URL,以在任务完成时调用它们。但是,我似乎找不到回调传感器。人们通常如何处理?

callback airflow

1
推荐指数
1
解决办法
1644
查看次数

嵌套结构时,棉花糖反序列化失败

我正在尝试用棉花糖反序列化深层结构。例如:

hour = {
    'day': {
        'name': 'monday'
    }
}
loaded_hour, error = HoursSerializationSchema().load(hour) # this works

new_practitioner_at_location = {
    'hours': [
        hour
    ]
}
loaded, error = PractitionerToServiceLocationSerializationSchema().load(new_practitioner_at_location) # this fails
Run Code Online (Sandbox Code Playgroud)

当我尝试反序列化时,new_practitioner_at_location我得到以下信息(发生在序列化程序使用“ day”键时):

AttributeError: 'dict' object has no attribute '_sa_instance_state'

请注意,当相同的数据结构(小时)未嵌套在时,相同的模式可以反序列化该数据结构new_practitioner_at_location

显示问题的自包含脚本:

from sqlalchemy import Column, Integer, ForeignKey, String
from sqlalchemy.orm import relationship, backref
from sqlalchemy.ext.declarative import declarative_base
import os
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_marshmallow import Marshmallow
from flask_migrate import …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy flask marshmallow

0
推荐指数
1
解决办法
232
查看次数