- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
对于个人项目,我将 PonyOrm 与 FastApi 一起使用;有没有一种经典的方法可以在端点的整个异步生命周期调用中保持 db_session ?
PonyOrm 的文档中谈到了使用装饰器和产量;但它对我不起作用,所以在查看了其他 Github 项目之后,我发现这个解决方法工作正常。
但我真的不知道幕后发生了什么,以及为什么 Pony 的文档对异步主题不准确。
def _enter_session():
session = db_session(sql_debug=True)
Request.pony_session = session
session.__enter__()
def _exit_session():
session = getattr(Request, 'pony_session', None)
if session is not None:
session.__exit__()
@app.middleware("http")
async def add_pony(request: Request, call_next):
_enter_session()
response = await call_next(request)
_exit_session()
return response
然后在依赖项中,例如:
async def current_user(
username: str = Depends(current_user_from_token)) -> User:
with Request.pony_session:
# db actions
在端点调用中:
@router.post("/token", response_model=Token)
async def login_for_access_token(
request: Request,
user_agent: Optional[str] = Header(None),
form_data: OAuth2PasswordRequestForm = Depends()):
status: bool = authenticate_user(
form_data.username,
form_data.password,
request.client.host,
user_agent)
@db_session
def authenticate_user(
username: str,
password: str,
client_ip: str = 'Undefined',
client_app: str = 'Undefined'):
user: User = User.get(email=username)
如果你们有更好的方法或好的解释,我很想听听:)
最佳答案
我有点像 PonyORM 开发人员和 FastAPI 用户。
async 和 Pony 的问题在于 Pony 使用我们理解的原子事务。此外,如果上下文将切换到另一个协程,我们还使用可以在另一个 session 中使用的线程本地缓存。
我同意我们应该在文档中添加有关它的信息。
为确保一切正常,您应该使用 db_session
作为上下文管理器,并确保您在此代码块中没有异步调用。
如果您的端点不是异步的,您也可以使用 db_session
他们的装饰师。
在 Pony 中,我们同意使用 ContextVar
而不是 Local
应该对某些情况有所帮助。
一句话的答案是:使用小的短期 session ,不要用异步中断它们。
关于python-asyncio - 将 PonyOrm 与 FastApi 一起使用的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64844557/
我有动态条件查询,即 select (lambda obj:obj.A = 'a' and obj.B = 'b' and ...) 所以我为此编写代码: def search(self,**kwa
我想将我的模型类分离到模型目录中的单独文件中。我想要一个单独的文件: 一般(身份验证和全局类/表) 请购单(用于请购单的表格) 工单(用于工单的表) sales_orders(用于销售订单的表) ..
我使用 PonyORM 作为我的 SQLite 数据库的 ORM,在 Raspberry PI 3 上使用 Python 3.5(不是你能想象的最快的设备,但应该不会那么糟糕)。 某些操作(例如插入)
今天我正在使用 sql_debug(True) 帮助我查看查询但没有值。 我怎么能看到 ponyorm 如何用值翻译查询? 非常感谢。这是我正在使用的查询示例。 with db_session
我正在使用 ponyORM 并查询 PeopleModel"例如: first_name = "avi" sqlObject = select(p for p in PeopleModel if ra
我正在为团队 build 游戏库构建 API。这些游戏定义了类型、大小和长度等属性,我将它们存储为多对多关系。该模型如下所示: class Game(db.Entity): game_type
如果这是一个明显的问题,请原谅我,但我对 pony 和数据库一般都是新手,没有找到文档的正确部分来回答这个问题。 我正在尝试创建一个数据库,其中包含公司以及这些公司设有办事处的地点。这是一个多对多的关
我对 ponyORM 和多对多关系有疑问。我正在使用 python3.7、ponyORM 和 PostgreSQL Db。 设置:我的数据库中有两个模式,假设模式“A”和模式“B”。在模式“A”中有两
在这个例子中: with db_session: p = select(_ for _ in Person in _.name == 'John')[:][0] 我需要它来进行调试,因为我希望
我只是想为一个小型个人 Web 应用程序试用 pony orm 映射器。除了为实体定义自定义构造函数外,一切正常。 在下面的代码中,我创建了一个带有字符串字段 name 的简单实体,并定义了一个构造函
我正在使用这个 Python ORM 来管理我的应用程序中的数据库:ponyorm.com 我刚刚更改了表中的一个属性,我会向我计算行数,他返回 1 表示 TRUE,0 表示 FALSE。 例如:仅使
请假设this data model .这是我真正拥有的简化模型,但所有重要领域都在那里。数据库:Postgres。我想计算这些模型的一些统计数据,我偶然发现了这个问题: c = Customer.s
我正在尝试使用 Pony ORM 创建一对一映射。 class ApplierIngress(ApplierObjectMapper.db.Entity): correlation_id =
我有以下代码,可将大型 CSV 文件(超过 350 万行)加载到 SQLite 数据库中。 该程序工作正常,但似乎没有释放内存,因此在运行该程序时,我可以使用命令top查看其内存大小如何增长,直到耗尽
我有一个 URL https://example.com?p1=nai&p2=tex&p3=mak 我在 MYSQL 上使用 PONY ORM + Flask。我想获取与 URL 参数匹配的所有行。
我正在使用 ponyorm。如何将此查询转换为只返回一个结果(如果存在)的查询?如果有多个结果,我希望它抛出一个错误,类似于 entity.get() 查询。 url = 'some url' acc
期间我了解到entity inheritance在 PonyORM 上,出于好奇,我实现了以下内容: from pony.orm import * db = Database() class Pers
对于个人项目,我将 PonyOrm 与 FastApi 一起使用;有没有一种经典的方法可以在端点的整个异步生命周期调用中保持 db_session ? PonyOrm 的文档中谈到了使用装饰器和产量;
我正在使用 Pony ORM 版本 0.7 和磁盘上的 Sqlite3 数据库,并遇到此问题:我正在执行选择,然后更新,然后选择,然后另一个更新,并收到错误消息 pony.orm.core.Unrep
我是一名优秀的程序员,十分优秀!