小编cha*_*aos的帖子

将“on_conflict_do_update()”与 sqlalchemy ORM 结合使用

我目前正在使用 SQLAlchemy ORM 来处理我的数据库操作。现在我有一个需要ON CONFLICT (id) DO UPDATE. 该方法on_conflict_do_update()似乎是正确的使用方法。但这里的帖子说代码必须切换到 SQLAlchemy 核心,并且缺少高级 ORM 功能。我对这个说法感到困惑,因为我认为像下面的演示这样的代码可以实现我想要的,同时保留 SQLAlchemy ORM 的功能。

class Foo(Base):
  ...
  bar = Column(Integer)


foo = Foo(bar=1)


insert_stmt = insert(Foo).values(bar=foo.bar)
do_update_stmt = insert_stmt.on_conflict_do_update(
    set_=dict(
        bar=insert_stmt.excluded.bar,
    )
)

session.execute(do_update_stmt)
Run Code Online (Sandbox Code Playgroud)

我还没有在我的项目上测试它,因为它需要大量的修改。请问这是否是处理ON CONFLICT (id) DO UPDATESQLALchemy ORM 的正确方法?

python sqlalchemy

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

Gunicron 无法在指定端口启动

我试图让我的 Flask 程序监听端口 5000,以下是主要部分app/app.py

app = Flask(__name__)

@app.route('/')
def index():
    app.logger.info("Receiving a request")
    if (request.method == "POST"):
        query = request.args.get("query")
        file = request.files['file']
        app.logger.info(query)
        filePath  = '/tmp/tmpDoc'
        # write something to file
        searchResult = bootLoader.run(filePath, query)
        ans = searchResult['answers']
        return jsonify(ans)
    return "hihi"

if __name__ == "__main__":
    app.run(debug=True, port=5000)
Run Code Online (Sandbox Code Playgroud)

和我的wsgi.py

from app.app import app

if __name__ == "__main__":
    app.run(debug=True, port=5000)
Run Code Online (Sandbox Code Playgroud)

我使用gunicorn by 运行程序gunicorn wsgi:app,但调试功能和指定端口都不起作用。这是日志:

[2021-02-09 16:50:58 +0800] [62555] [INFO] Starting gunicorn 20.0.4
[2021-02-09 16:50:58 +0800] …
Run Code Online (Sandbox Code Playgroud)

python flask gunicorn

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

标签 统计

python ×2

flask ×1

gunicorn ×1

sqlalchemy ×1