python 我不知道如何删除sqlalchemy 1.4关于cache_ok的警告

rdlzhqv9  于 2023-03-16  发布在  Python
关注(0)|答案(2)|浏览(97)

我在postgres中使用sqlalchemy 1.4.17,并进行了pytest-asyncio测试,该测试调用了一个函数,该函数创建了一个包含uuid的记录。

async def create_user(session: AsyncSession, input_user_data):
     new_user = model.User(**dict(input_user_data))
     session.add(new_user)
     await session.commit()
class User(Base):
    __tablename__ = "user"
    id = Column(GUID, primary_key=True,
                server_default=DefaultClause(text("gen_random_uuid()")))

它运行正常,但会创建一个警告

sys:1: SAWarning: TypeDecorator GUID() will not produce a cache key because the ``cache_ok`` flag is not set to True.  Set this flag to True if this type object's state is safe to use in a cache key, or False to disable this warning.

不知道怎么让它安静下来。任何帮助都是感激的!

jei2mxaa

jei2mxaa1#

谢谢@snakecharmerb。它指出了我做错了什么。如果这对其他人有帮助的话,我从fastapi_utils导入GUID,而不是直接从sqlalchemy导入

# from fastapi_utils.guid_type import GUID, GUID_SERVER_DEFAULT_POSTGRESQL
from sqlalchemy.dialects.postgresql import UUID
class User(Base):
    __tablename__ = "user"
    id = Column(UUID, primary_key=True,
                server_default=DefaultClause(text("gen_random_uuid()")))

使用SQL炼金术类型装饰器要容易得多,而不是修改fastapi实用程序库。

33qvvth1

33qvvth12#

如果出于某种原因使用自定义TypeDecorator,例如:

class MyUUIDType(TypeDecorator):

    impl = sqlalchemy.dialects.postgresql.UUID
    
    ...

然后,需要将cache_ok = True添加为类成员

class MyUUIDType(TypeDecorator):

    impl = sqlalchemy.dialects.postgresql.UUID
    cache_ok = True    

    ...

当然,只有在列的TypeDecorator是可缓存的情况下才这样做。

相关问题